在类函数中声明的全局在包含的文件中不可用



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

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

相关内容

  • 没有找到相关文章

最新更新