ホームページ >バックエンド開発 >PHPチュートリアル >PHPのグローバルと$GLOBALS[
この記事ではphpにおけるglobalと$GLOBALS[' ']の違いを中心に紹介しますので、興味のある方は参考にしていただければ幸いです。
PHP では global と $GLOBALS[' '] に違いはないと思っていましたが、今日調べてみたところ、両者には大きな違いがあることが分かりました。
global $var: ポイントグローバル変数 $var への参照;
$GLOBALS["var"]: グローバル変数 $var 自体であり、$var と同等です。
例 1:
<?php $var1 = 1; $var2 = 2; function test() { $GLOBALS['var2'] = &$GLOBALS['var1']; } test(); echo $var2;//输出1 ?>test()関数 $GLOBALS[' var2'] は、グローバル変数 $var1 と同等です。
$GLOBALS['var2'] = $GLOBALS['var1'] この関数は、$var2 を $var1 への参照に変更することです。つまり、 $var2 は $var1 のエイリアスであり、両方とも同じメモリ空間を指すため、$var2 の値は 1 になります。
<?php $var1 = 1; $var2 = 2; function test(){ global $var1, $var2; $var2 = &$var1; echo $var2; $var2 = 'hello...'; } test(); // 输出 1 echo $var2; // 输出 2 echo $var1; // 输出 hello... ?>テスト関数では、$var1 と $var2 はそれぞれ、テスト内のグローバル変数 $var1 と $var2 への参照 (つまり、エイリアス) です。関数(ローカル変数の値)は関数内の$var1の参照に変更されます。このとき、テスト関数内の$var2の値は関数内の$var1の値と等しくなります。 3 つはグローバル変数の $var1 の値を指し、テスト関数の $var2 の値が変化すると、他の 2 つの値 (テスト関数の $var1 と $)グローバル変数の var1) も変更されます。
例 3.
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>前述したように、$GLOBALS['var1'] はグローバル変数の $var1 と同等です。 unset($GLOBALS['var1'] ); は unset($GLOBALS['var1' )] と同等です。 ] ); 変数 $var1 が破棄されるため、出力は空になります。
補足:
変数を破棄するには、多くの場合、変数を破棄するだけですが、メモリ内の値は空になります。破壊されない(つまり、unset()関数のインデックスは変数とメモリの関係を切断し、変数名は破壊されず、メモリ内の値は破壊されず、メモリは解放されないことに注意してください)。 :1. この関数は、変数によって占有されているメモリが 256 バイトを超えた場合にのみ機能し、メモリは解放されます。
2. アドレスは、変数が指すメモリを指すすべての変数 (変数へのすべての参照など) が破棄された場合にのみ解放されます。
例 4.
<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; //结果为打印1 ?>このコードでは、test() 関数で global を使用して定義された変数は、実際にはグローバル変数 $var への参照にすぎません。test() 関数で変数を破棄することは、グローバル変数を破棄することと同じです。 (2 つの名前を持つメモリの一部であり、一方の名前を削除しても、もう一方の名前とメモリの値には影響しません)、そのため、グローバル変数 $var を出力しても、結果は 1 のままです。このコードは次のコードに似ています:
<?php $var = 1; $var1 = &$var; unset($var1); echo $var; ?>関数内でグローバル変数を参照する別の例を見てください:
<?php $var1 = "我是变量var1的值"; $var2 = "我是变量var2的值"; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 = &$var1; echo $var1; echo $var2; echo "<br />"; } else { $GLOBALS["var2"] = &$var1; echo $var1; echo $var2; echo "<br />"; } } global_references(false); //1.打印:我是变量var1的值我是变量var1的值 echo $var1; echo $var2; echo "<br />"; //2.打印:我是变量var1的值我是变量var2的值 global_references(true); //3.打印:我是变量var1的值我是变量var2的值 echo $var1; echo $var2; echo "<br />"; //4.打印:我是变量var1的值我是变量var1的值 ?>パラメータが false であるため、if 内のステートメントが実行され、global_references() の var2 の値が関数内で宣言されたグローバル変数 var2 によって元々参照されていたものは、var1 の参照になるため、global_references() 関数で出力される 2 つの変数はグローバル変数 var1 の参照になります。
関連する推奨事項:
PHP が外部変数 $GLOBALS を読み取る
PHP json_encode($GLOBALS) エラーの理由
以上がPHPのグローバルと$GLOBALS[の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。