Php 类函数中声明的全局函数在包含的文件中不可用?
以下面的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', $
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
在某个文件中有一个正确的值
对我有效:并且