为什么设置超全局变量$ GLOBALS ['foo']不起作用?

时间:2012-07-31 12:22:33

标签: php scope superglobals

以下代码会产生警告:

<?php
$GLOBALS['foo'] = "Example content<BR><BR>";
echo $foo; // that works!
Test();

function Test()
{
    echo $foo; // that doesn't work!
}
?>

警告是:

Notice: Undefined variable: foo

怎么回事?

3 个答案:

答案 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