采用以下 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"覆盖,要么是因为某种类型的全局范围问题。 我在这里错过了什么?
附言 - 我比任何人都讨厌全局变量,但在这种情况下,如果不破坏遗留代码,我就无法修复它。
编辑:我已经修改了上面的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
声明以某种方式超出范围?
我总是建议在代码的零级别定义全局变量,例如在单独的文件中,并将此文件包含在所有源代码中。