3

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

4

1 回答 1

1

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

于 2012-10-05T12:55:28.873 回答