在包含文件中没有在类函数中声明的全局?

时间:2012-10-01 17:26:14

标签: php global-variables

采取以下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声明以某种方式超出范围?

1 个答案:

答案 0 :(得分:1)

我总是建议在代码的零级别定义全局变量,例如在单独的文件中,并在所有来源中包含此文件。