ホームページ  >  記事  >  バックエンド開発  >  PHP のグローバル変数がローカル変数のアドレスを参照している場合

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

WBOY
WBOYオリジナル
2016-06-13 12:20:07999ブラウズ

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

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


関数内で b を出力するときは abc ですが、関数を抜けた後は b が出力されて戻ります。 dasdf Value の初期値、何が起こっているのでしょうか?ローカル変数のアドレスが参照されるため、ローカル変数が破棄された後は b の値が空になるのは当然です。
------ソリューションのアイデア----------------------
マニュアル内:
http : //www.php.net/manual/zh/ language.references.whatdo.php#example-251
関数内でグローバルとして宣言された変数に参照が割り当てられている場合、参照は Visible のみになります。関数の内部。これは、$GLOBALS 配列を使用することで回避できます。
その理由は次のとおりです:
global $var; を $var =& $GLOBALS['var']; の省略形として扱います。したがって、他の参照を $var に代入しても、ローカル変数の参照が変更されるだけです。
-----ソリューションのアイデア----------------------

この投稿最終的に xuzuning によって 2012-08-28 09:21:48 に編集されました $b = "dasdf";
function abc(){
$a = "abc";
global $b; //これは $GLOBALS['b']
への参照です $b = &$a;
$GLOBALS['bb'] = & $a;
echo $b."inner;" ;
}
abc(); //abcinner;
echo $b.";"; //dasdf;
echo $bb; ------解決策-----------

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