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 つの概念を思い出してください。すべての変数はポインターであり、スコープが異なるすべての変数は異なる変数です。つまり、