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

时间:2010-07-07 10:09:30

标签: php variables global-variables scope

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

我的代码:

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

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

echo "from=$from<br />";
myfunc();

结果是:

from=2010-05-01
from(myfunc)=

发生了什么事? :(

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

2 个答案:

答案 0 :(得分:25)

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

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

如果您在定义something.php之前在$from内添加{{1}},则可能会有效。

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

答案 1 :(得分:14)

帮自己一个忙,并使用Dependency Injection.

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

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