1

以下代码会产生警告:

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

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

警告是:

Notice: Undefined variable: foo

怎么来的 ?

4

3 回答 3

4

在函数内部,$foo除非您将其称为 as$GLOBALS['foo']或 use ,否则超出范围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 文档$GLOBALS文档以获取更多示例。

于 2012-07-31T12:23:17.253 回答
2

您将需要始终通过 $GLOBALS 数组引用它。阅读变量范围以获得完整的描述性答案。

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

function Test()
{
    echo $GLOBALS['foo']; // that doesn't work!
}
?>
于 2012-07-31T12:23:37.993 回答
1

您可以将代码更改为:

function Test() {
    global $foo;

    echo $GLOBALS['foo'];
    echo $foo;
}

您必须声明您从 PHP 函数访问的全局变量。见: http: //php.net/manual/en/language.variables.scope.php

于 2012-07-31T12:25:34.457 回答