ホームページ  >  記事  >  バックエンド開発  >  PHP における global と $GLOBALS[] の違い

PHP における global と $GLOBALS[] の違い

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

PHP における global と $GLOBALS[] の違い

多くの人は、global と $GLOBALS[] は書き方が違うだけだと思っていますが、そうではありません。

公式の説明によると、

1.$GLOBALS['var'] は外部グローバル変数そのものです

2.global $var は、外部 $var と同じ名前の参照またはポインタです。

例を挙げてみましょう:

  1. $var1?=?1;??
  2. $var2?=?2;??
  3. 関数?test(){??
  4. ????$GLOBALS['var2']?=?&$GLOBALS['var1'];??
  5. }??
  6. テスト();??
  7. エコー?$var2;??
  8. ?>??

通常の印刷結果は 1 です

  1. $var1?=?1;??
  2. $var2?=?2;??
  3. 関数?test(){??
  4. ??グローバル?$var1,$var2;??
  5. ????$var2?=?&$var1;??
  6. }??
  7. テスト();??
  8. エコー?$var2;??
  9. ?>??

予期しない印刷結果は 2 です

印刷結果が 2 なのはなぜですか?実際には、$var1 の参照が $var2 の参照アドレスを指しているためです。結果として得られる物質の価値は変わりません。

別の例を見てみましょう。

  1. $var1?=?1;??
  2. 関数?test(){??
  3. ????unset($GLOBALS['var1']);??
  4. }??
  5. テスト();??
  6. エコー?$var1;??
  7. ?>??

$var1 が削除されたため、何も出力されません。

  1. $var1?=?1;??
  2. 関数?test(){??
  3. ????グローバル??$var1;??
  4. ????unset($var1);??
  5. }??
  6. テスト();??
  7. エコー?$var1;??
  8. ?>??

誤って 1 を印刷してしまいました。これは、エイリアス参照だけが削除され、値自体は一切変更されていないことを示しています。

わかりますか?

言い換えると、グローバル $var は実際には $var = &$GLOBALS['var'] です。外部変数のエイリアスを呼び出すだけです

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