以下代码会产生警告:
<?php
$GLOBALS['foo'] = "Example content<BR><BR>";
echo $foo; // that works!
Test();
function Test()
{
echo $foo; // that doesn't work!
}
?>
警告是:
Notice: Undefined variable: foo
怎么回事?
答案 0 :(得分:4)
在功能内部,$foo
超出了范围,除非您将其称为$GLOBALS['foo']
或使用global $foo
。使用$GLOBALS
定义全局虽然提高了可读性,但不会自动保留变量名以供在所有范围中使用。您仍然需要在较低范围内显式调用全局变量来使用它。
function Test()
{
echo $GLOBALS['foo'];
// Or less clear, use the global keyword
global $foo;
echo $foo;
}
甚至可以在同一个函数中同时使用本地$foo
(尽管根本不推荐):
$GLOBALS['foo'] = "foo! :)";
function getFoo()
{
$foo = "boo :(";
echo $GLOBALS['foo'] . "\n"; // Global $foo
echo $foo; // Local scope $foo since it has no global keyword
}
getFoo();
// foo! :)
// boo :(
查看PHP documentation on variable scope和$GLOBALS
documentation了解更多示例。
答案 1 :(得分:2)
您需要始终通过$ GLOBALS数组引用它。阅读variable scope以获得完整的描述答案。
<?php
$GLOBALS['foo'] = "Example content<BR><BR>";
echo $foo; // that works!
Test();
function Test()
{
echo $GLOBALS['foo']; // that doesn't work!
}
?>
答案 2 :(得分:1)
您可以将代码更改为:
function Test() {
global $foo;
echo $GLOBALS['foo'];
echo $foo;
}
您必须声明从PHP函数访问哪些全局变量。请参阅:http://php.net/manual/en/language.variables.scope.php