PHP グローバルおよび $GLOBALS[]
でのグローバル変数の使用
PHP でプロジェクトを開発する場合、たとえば、一部の Web サイト構成情報はサイト全体に共通であるため、1 か所で設定し、複数の場所で呼び出すことができます。変数をグローバル変数として定義するには、グローバルと $GLOBALS[] の 2 つの方法があります。 global と $GLOBALS[] の書き方が違うだけだと思っている人も多いですが、実際には違いがあります。
まずグローバルを見てみましょう
PHP のグローバル変数の分析は次のとおりです。 Global の役割はグローバル変数を定義することですが、このグローバル変数は Web サイト全体ではなく、現在のページ (include または require 内のすべてのファイルを含む) に適用されます。
次の PHP コードを見てください:
$a=123; function test1() { global $a; //如果不把$a定义为global变量,函数体内是不能访问$a的 echo $a; //123 } test1(); global $b; $b=456; function test2() { var_dump($b); //NULL } test2(); function test3() { global $c; $c=789; } test3(); echo $c; //789
? コードから要約すると、関数本体内で定義されたグローバル変数は関数本体外で使用できますが、関数本体外で定義されたグローバル変数は関数本体内では使用できません。
$GLOBALS[] を見てみましょう
$var1 = 1; $var2 = 2; function test1(){ $GLOBALS['var2'] = &$GLOBALS['var1']; } test1(); echo $var2; //1 $var3 = 1; $var4 = 2; function test2(){ global $var3,$var4; $var4 = &$var3; } test2(); echo $var4; //2
なぜ $var2 は 1 を出力し、$var4 は 2 を出力するのでしょうか?実際には、$var3 の参照が $var4 の参照アドレスを指しているためです。 $var4 の実際の値は変更されていません。公式の説明は次のとおりです。 $GLOBALS['var'] は外部グローバル変数そのものであり、グローバル $var は外部 $var の同じ名前の参照またはポインタです。
この例はまだあまり明確ではないかもしれません。別の例を紹介しましょう:
$var1 = 1; function test1(){ unset($GLOBALS['var1']); } test1(); var_dump($var1); //NULL $var2 = 1; function test2(){ global $var2; unset($var2); } test2(); echo $var2; //1
?$var1 の値は削除されますが、$var2 の値はまだ存在します。これは、$var2 が単なるエイリアス参照であり、その値がまったく変更されていないことを証明しています。つまり、グローバル $var は実際には $var = &$GLOBALS['var'] であり、これは外部変数を呼び出すための単なるエイリアスです。