Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类函数中声明的全局函数在包含的文件中不可用?_Php_Global Variables - Fatal编程技术网

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

Php 类函数中声明的全局函数在包含的文件中不可用?,php,global-variables,Php,Global Variables,以下面的php类为例: class test { function do_it_to_it(){ global $path; if(somecondition){ $path = 'path/to/goodies'; require_once('some_file'); } } } “一些文件”的内容如下: global $path; define('GOODIEPATH', $

以下面的php类为例:

 class test
 {
    function do_it_to_it(){
        global $path;

        if(somecondition){
           $path = 'path/to/goodies';
           require_once('some_file');
        }
    }
 }
“一些文件”的内容如下:

global $path;
define('GOODIEPATH', $path); 
现在我呼吁:

$t1 = new test();
$t1->do_it_to_it();
“some_file”中的$path将为null,而不是“path/to/goodies”。我感觉这是因为第二个“global$path”出于某种原因或由于某种类型的全局范围问题而覆盖了$path。我错过了什么

我比任何人都讨厌globals,但在这种情况下,我无法在不破坏遗留代码的情况下修复它

EDIT:我修改了上面的
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表示讨厌全局变量,但被遗留代码卡住。您不需要
global$path“某些文件”
的内容中。事实上,您应该能够在不使用
global
语句的情况下执行此操作-包含的文件在其包含的范围内执行,在包含尝试读取
$path
的文件之前,您为
$path
设置了一个值。问题是?你想重构吗?或者想修复
类测试
?只需测试此代码,即可正常工作
$path
某个文件中有一个正确的值
对我有效:并且