采取以下 php 类:
class test
{
function do_it_to_it(){
global $path;
if(somecondition){
$path = 'path/to/goodies';
require_once('some_file');
}
}
}
“some_file”的内容如下:
global $path;
define('GOODIEPATH', $path);
现在我打电话:
$t1 = new test();
$t1->do_it_to_it();
“some_file”中的 $path 将为空,而不是“path/to/goodies”。我有一种感觉,这是因为 $path 要么由于某种原因被第二个“全局 $path”覆盖,要么因为某种类型的全局范围问题。我在这里想念什么?
PS - 我比任何人都更讨厌全局变量,但在这种情况下我无法在不破坏遗留代码的情况下修复它。
编辑:我已经修改了test
上面的类以显示if
真实代码中存在的语句。我似乎通过在语句中移动global
语句来解决问题if
,如下所示:
class test
{
function do_it_to_it(){
if(somecondition){
global $path;
$path = 'path/to/goodies';
require_once('some_file');
}
}
}
知道为什么这似乎可以解决它吗?该if
语句导致原始global
声明以某种方式超出范围?