从命令行运行时重置PHP变量

时间:2012-02-28 20:30:42

标签: php arrays reset

在文件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时,我得到上面的输出。

1 个答案:

答案 0 :(得分:2)

您描述的情况不会产生您描述的输出。还有其他事情要发生;还没有在问题中添加其他代码。

从一个非常简单的测试:

$ ls -la
-rw-rw-r--   1 jon jon    59 2012-02-28 20:37 config.inc.php
-rw-rw-r--   1 jon jon    83 2012-02-28 20:37 config.php

$ cat config.*
<?php
$_CONFIG = array('x' => 'y');
var_dump($_CONFIG);
?>
<?php

$_CONFIG = array();
require_once('config.inc.php');
var_dump($_CONFIG);

?>
$ php config.php
array(1) {
  ["x"]=>
  string(1) "y"
}
array(1) {
  ["x"]=>
  string(1) "y"
}

您看到输出的可能原因:

  • config.inc.php使用命名空间,定义$ _CONFIG的新副本不在全局命名空间中
  • require_once('config.inc.php');首先检查您的包含路径,并且包含与您期望的不同的config.inc.php