即使使用全局关键字,PHP全局变量也未在函数内定义

Oba*_*bay 14 php variables scope global-variables

是的,我知道全局变量是一种不好的做法,但是为这个规则放宽了规则:P

我的代码:

include('something.php'); //where $from is declared

function myfunc() {
    global $from;
    echo "from(myfunc)=$from<br />";
    ...
}

echo "from=$from<br />";
myfunc();
Run Code Online (Sandbox Code Playgroud)

结果是:

from=2010-05-01
from(myfunc)=
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?:(

编辑:如果它有帮助,上面的所有代码都在CodeIgniter中的视图文件中(是​​的,我知道函数不应该在视图内部:P)

Pek*_*ica 25

我用这个片段打赌你不是全球范围内的啤酒.你是在一个函数中调用它吗?

在这种情况下,$from您定义的something.php不是全局的,而您在函数中引用的是.

如果在定义之前添加global $from;内部something.php,它可能会起作用$from.

毋庸置疑,无论如何,这都不是一个好习惯,你应该遵循戈登的建议.


Gor*_*don 14

帮自己一个忙,并使用依赖注入.

function myfunc($from) {
    return "from(myfunc)=$from<br />";
}
$from = '2010-05-01';
echo myfunc($from);
Run Code Online (Sandbox Code Playgroud)

这样做会使您的代码更易于维护,更少耦合,更容易进行单元测试,因为它与全局范围隔离.另外,当你这样做时,人们会觉得你很酷.

  • +1我从未意识到我可以说"自2002年以来我一直在进行依赖注入":) (5认同)