【发布时间】:2012-02-28 20:30:41
【问题描述】:
在 config.php 文件中
$_CONFIG = array();
require_once("config.inc.php");
var_dump($_CONFIG);
在 config.inc.php 文件中
$_CONFIG = array('x' => 'y', ...);
var_dump($_CONFIG);
从命令行运行此代码的输出是:
array(15) {
["x"]=>
string(1) "y"
...
}
array(0) {
}
如果我删除初始化空 $_CONFIG 数组的 config.php 的第一行,则脚本可以工作,并且 var_dumps 是相同的。
请注意,这是从命令行运行的脚本。知道为什么会这样吗?我在两台不同的机器上试过这个,一台使用 PHP 5.3.3,另一台使用 PHP 5.3.5。
更新 - 这似乎只是命令行的问题。从浏览器运行时,它似乎很好。另外,还有第三个文件我忘了提,它包括 config.php
test.php
require_once("/path/to/config.php");
当从命令行运行 test.php,而不是 config.php,我得到上面的输出。
【问题讨论】:
-
我创建了相同的文件并看到了预期的结果 - 两次相同的数组。你能用 2 个小文件重现它吗?
-
完全符合我的预期.. PHP 5.3.10.
-
你确定你告诉了我们这些文件中的所有内容吗?
php --version? -
当你在 config.inc.php 中定义 $_CONFIG 时,你是在函数中做的吗?该问题可能与无法访问的全局变量有关,因此,“重新定义”被视为不同的局部变量(即变量范围的问题)。
-
@yi_H PHP 版本 5.3.3。
config.inc.php仅填充 $_CONFIG 数组,尽管我已将其截断。config.php在var_dump之后包含更多代码,但在它之前除了 cmets 之外什么都没有,并且这 3 行之间没有任何内容。