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は、として呼び出す$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のドキュメントと$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 に答える