ホームページ  >  記事  >  バックエンド開発  >  PHP のグローバル変数はローカル変数のアドレスを指します

PHP のグローバル変数はローカル変数のアドレスを指します

WBOY
WBOYオリジナル
2016-06-13 13:13:14903ブラウズ

PHP のグローバル変数がローカル変数のアドレスを参照している場合

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    $b = "dasdf";
    function abc(){
        $a = "abc";
        global $b;
        $b = &$a;
        echo $b."inner;";
    }
    abc();
    echo $b.";";



関数内で b を出力すると abc になりますが、関数を抜けた後は関数の出力 b は dasdf の初期値に戻ります。どうなっているでしょうか。ローカル変数のアドレスが参照されるため、ローカル変数が破棄された後は b の値が空になるのは当然です。

-----解決策--------------------------------
マニュアル内:
http://www.php.net/manual/zh/ language.references.whatdo.php#example-251
参照が変数に割り当てられている場合関数内でグローバルとして宣言され、参照は関数内でのみ表示されます。これは、$GLOBALS 配列を使用することで回避できます。
その理由は次のとおりです:
global $var; を $var =& $GLOBALS['var']; の省略形として扱います。したがって、別の参照を $var に代入しても、ローカル変数への参照が変更されるだけです。
------解決策---------
$b = "dasdf";
関数abc(){
$a = "abc";
global $b; //これは $GLOBALS['b']
$b = &$a;
$ GLOBALS への参照です['bb'] = & $a;
echo $b."inner;";
}
abc(); //abcinner;
echo $b.";"; dasdf;
エコー $bb; //abc

------解決策------------------
PHP の 2 つの概念を思い出してください。すべての変数はポインターであり、スコープが異なるすべての変数は異なる変数です。つまり、
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。