PHP プログラム開発では、$GLOBALS[] と global の違いに気づかない人が多いですが、この 2 つの書き方は文字通りの違いだけでなく、実際には大きく異なります。
具体的な違い
1.$GLOBALS['var'] は外部グローバル変数そのもの (実際の外部 $var 自体) です。
2.global $var は、外部 $var と同じ名前の参照またはポインタです (外部 $var の代替として理解できます)。
例を挙げてみましょう:
クリップボードにコピー![烈火提示:点击查看 Liehuo.Net Codes](http://www.bkjia.com/images/quote.gif)
引用コンテンツ:
[www.bkjia.com]
$var1 = "test1";
$var2 = "test2";
$GLOBALS['var2'] = &$GLOBALS['var1'];
test() ;
echo $var2; // test1 を出力します
?>
上記コードの出力結果はtest1です
クリップボードにコピー
引用コンテンツ: [www.bkjia.com]
![烈火提示:点击查看 Liehuo.Net Codes](http://www.bkjia.com/images/quote.gif)
$var1 = "test2"; 関数 test(){
$var2 = &$var1; echo $var2; // test2 を出力します
?>
上記のコードの出力は少し予想外で、結果は test2 です
test2 が出力されるのはなぜですか?実際には、$var1 の参照が $var2 の参照アドレスを指しているためです (平たく言えば、テスト関数内の $var1 は代替です)。結果として得られる物質の価値は変わりません。
別の例を見てみましょう。
クリップボードにコピー
引用コンテンツ:
[www.bkjia.com]
$var1 = "test1";
unset($GLOBALS['var1']); test(); // 何も出力されません ? ;
![烈火提示:点击查看 Liehuo.Net Codes](http://www.bkjia.com/images/quote.gif)
$var1は本当に削除されているため、何も出力できません。
クリップボードにコピー
引用コンテンツ:
[www.bkjia.com]
$var1 = "test1";
function test(){
unset($var1);
test(); // test1 を出力します。
今度はまたtest1が誤って出力されてしまいました。これは、エイリアスまたは参照(代替)のみが削除され、変数自体の値は一切変更されていないことを証明します。
わかりますか?
言い換えると、global $var は実際には、外部変数を呼び出すための $var = &$GLOBALS['var'] のエイリアスです。
http://www.bkjia.com/PHPjc/363889.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/363889.html
技術記事
PHP プログラム開発では、多くの開発者は $GLOBALS[] と global の違いに気づきません。この 2 つの書き方は文字通りの違いだけでなく、実際には大きく異なります...
。