gpt4 book ai didi

php - "Namespaces",常量和多个 PHP 包含

转载 作者:行者123 更新时间:2023-12-02 07:57:14 26 4
gpt4 key购买 nike

我有一些类似于以下内容的 PHP 代码:

foreach ($settingsarray as $settingsfile)
{
include ($settingsfile);
// do stuff here
}

$settingsarray 是特定文件夹中的文件名数组。

问题是,每个 $settingsfile 都定义了常量(具有相同的名称),当然不能重新定义这些常量。

有哪些可能的方法可以防止在这种情况下发生错误?

我能想到的两个选项包括:将所有常量更改为变量以及使用 PHP 命名空间。

但是,我不确定如何使用命名空间,它需要在每个 $settingsfile 的开头进行声明?有没有一种方法可以在不使用命名空间的情况下隔离常量、变量和函数?

我真正喜欢的是能够做一些简单的事情,例如:

foreach ($settingsarray as $settingsfile)
{
{//added braces to indicate where the isolation is
include ($settingsfile);
// do stuff here
}//what happens in here does not affect what happens outside of here
}

我应该注意,这是新功能的一部分,并且是加载所有 $settingsfiles 的代码的唯一部分。其余代码一次仅加载一个文件。我使用常量的原因之一是我不必担心定义“全局”变量以便能够在函数内访问它们。

最佳答案

我的答案有点复杂,但应该对你很有用。我假设您有大量这些设置文件,因为您非常不愿意单独更改每个设置文件。

如果您能够使用命名空间,我假设您已经升级到 PHP 5.3RC2。将以下内容复制到 .php 文件中,并根据您的喜好更改命名空间:

<?php
namespace myapp\config;

function define($key, $val) {
Config::set($key, $val);
}

class Config {
private $vars = array();

// This class should not be instantiated
private function __construct() {}

public function set($key, $val) {
self::$vars[$key] = $val;
}

public function get($key) {
return isset(self::$vars[$key]) ? self::$vars[$key] : NULL;
}
}

?>

将其包含在您的代码中,现在只需更改即可使一切正常工作

<?php

在您的设置文件中

<?php namespace myapp\config;

如果你有很多这样的东西,终端中的快速“sed”命令应该可以很好地处理它,一举完成。

如果我不知道如何使用我的代码,这里有一个示例:

<?php
require_once('the_php_file_i_just_gave_you.php');
use \myapp\config\Config;

foreach ($settingsarray as $settingsfile) {
include ($settingsfile);
$varname = 'key';
echo "In this file, '$varname' equals: " . Config::get($varname);
}

?>

祝你好运!

关于php - "Namespaces",常量和多个 PHP 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com