采取以下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将为null而不是“path / to / goodies”。我有一种感觉,这是因为$ path由于某种原因被第二个“全局$ path”覆盖,或者是因为某种类型的全局范围问题。我在这里缺少什么?
P.S。 - 我比任何人都更讨厌全局变量,但在这种情况下我不能修复它而不破坏遗留代码。
编辑:我修改了上面的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
声明以某种方式超出范围?
答案 0 :(得分:1)
我总是建议在代码的零级别定义全局变量,例如在单独的文件中,并在所有来源中包含此文件。