$b = "dasdf"; function abc(){ $a = "abc"; global $b; $b = &$a; echo $b."inner;"; } abc(); echo $b.";";
マニュアル内:
http://www.php.net/manual/zh/ language.references.whatdo.php#example-251
A 変数を指定した場合グローバルに宣言された関数には、関数内でのみ表示される参照が割り当てられます。これは、$GLOBALS 配列を使用することで回避できます。
理由は次のとおりです:
global $var; を $var =& $GLOBALS['var']; の省略形として扱います。したがって、他の参照を $var に代入しても、ローカル変数の参照が変更されるだけです。
$b = "dasdf";
function abc(){
$a = "abc";
global $b; //これは $GLOBALS['b'] への参照です
$b = &$a;
$GLOBALS['bb'] = & $a;
echo $b.";";
echo $b.";"; bb; //abc
理解してください、関数内の $b は実際にはまったくグローバル $b ではなく、ローカル変数であることに変わりはありませんが、文 global $b はこの変数を宣言するだけでなく、それを指すこともあります。したがって、その値を変更 (再割り当て) すると、グローバル変数は上書きされます。ただし、文 $b = &$a は、ローカル変数 $b を $a が指すオブジェクトを指します。グローバル オブジェクト
PHP の 2 つの概念を思い出してください。すべての変数はポインターであり、すべての変数はスコープが異なれば変数も異なります。つまり
前者は JavaScript にも当てはまりますが、後者は JavaScript では異なります