PHP 全局变量在函数中未定义,即使使用了全局关键字也是如此

2022-08-31 00:19:22

是的,我知道全局变量是一种不好的做法,但是对于这个规则,放宽这个规则: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)


答案 1

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

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

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

毋庸置疑,无论哪种方式都不是一个好做法,你应该听从戈登的建议。


答案 2

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

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

这样做将使代码更易于维护、耦合更少且更易于单元测试,因为它与全局范围隔离。另外,当你这样做时,人们会认为你很酷。


推荐