ホームページ  >  記事  >  バックエンド開発  >  PHPのスーパーグローバル変数$GLOBALSとglobalの違いを詳しく解説

PHPのスーパーグローバル変数$GLOBALSとglobalの違いを詳しく解説

WBOY
WBOYオリジナル
2016-06-20 13:04:43933ブラウズ

PHP のスーパーグローバル変数 $GLOBALS とグローバルの違いの詳細な説明

1. スーパーグローバル変数 $GLOBALS

PHP には多くのスーパーグローバル変数があります。以下はすべてスーパーグローバル変数です。

$GLOBALS、$_SERVER、$_GET、$_POST、$_FILES、$_COOKIE、$_SESSION、$_REQUEST、$_ENV。

公式説明:

$GLOBALS — グローバル スコープで使用可能なすべての変数を指します。

すべての変数を含むグローバル結合配列。変数の名前は配列のキーです。

出現したグローバル変数は、$GLOBALS 配列を通じて取得できます。

PHP ライフサイクルでは、関数本体の外で定義されたいわゆるグローバル変数を関数内で直接取得することはできません。

$foo = "Example content";
test();
function test() {
    $foo = "local variable";
    echo '$foo in current scope: ' . $foo . "<br>";
    echo '$foo in global scope: ' . $GLOBALS["foo"] . "<br>";
}
 
上記の例では、外部 $foo にアクセスするには、$GLOBALS 配列を使用する必要があります。これは、インクルード ファイルを介して取り込まれる外部グローバル変数にも当てはまります。

php の Global にもそのような機能があります。$GLOBALS との違いは次のとおりです。

global は、関数の実際の外部変数ではなく、関数の外部変数を指すエイリアス変数を関数内に生成します。

$GLOBALS[] は実際には外部変数と呼ばれ、関数の内部と外部で常に一貫性があります。

クラス内のメンバー変数の場合、クラス内の関数は $this-> メソッドを使用してアクセスする必要があり、$GLOBALS メソッドは使用できません。

グローバルの役割はグローバル変数を定義することですが、このグローバル変数は Web サイト全体ではなく、現在のページ (include または require 内のすべてのファイルを含む) に適用されます。

2. 例の説明

実行結果は次のとおりです:

function t1() {
    global $var1, $var2;
    $var2 = &$var1;
}
function t2() {
    $GLOBALS['var3'] = &$GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
t1();
print $var2 ."\n";
t2();
print $var3 ."\n";

なぜ 2 つの 5 ではなく、1 つの 0 と 1 つの 5 なのでしょうか?

0
5
例を再度変更します:

実行結果には 2 のみが入力されます;

function t1() {
    global $var1;
    $var1 = 2;
    unset($var1);
}
function t2() {
    $GLOBALS['var1'] = 3;
    unset($GLOBALS['var1']);
}
$var1 = 1;
t1();
print $var1 . "\n";
t2();
print $var1 . "\n";
$GLOBALS は、定義されたすべてのグローバル変数から自動的に形成される配列です。変数名は配列のインデックスです。

つまり、$GLOBALS['var1'] は関数外の変数 $var1 と同じ変数であるため、$GLOBALS['var1'] が削除されると、変数は存在しなくなり出力できなくなります。

注: $GLOBALS は自動グローバル変数です。これは、すべてのスクリプトで機能することを意味します。関数またはメソッド内でグローバル $GLOBALS を使用してアクセスする必要はありません。

"global $var1;" は、関数の外で $var1 を生成するエイリアス変数 "$var1" です

これは実際の関数の外部変数ではなく、関数内にのみ存在するため、関数内でエイリアス変数を削除しても外部変数には影響しませんが、関数の外部変数の値は影響を受けません。変更される。

おそらく、これとあれの違いを常に知りたいと思っている人もいるでしょう。他のプログラムを含め、PHP プログラムを学習するときは、オンラインで検索するよりも自分で実験して、その結果に基づいて考えることができる場合があります。より正確に。次に、PHP がグローバル スコープ内の変数にアクセスする場合はどうすればよいでしょうか。

例 1: global はグローバル変数を定義します。

結果を与えずに自分でプログラムを実行します。関数内の変数にアクセスできます。

function test_global() {
    global $var1;
    $var1 = 'ok';
    unset($var1);
}
test_global();
$var2 = &$var1;
unset($var1);
echo $var2;
結果からわかるように、unset は変数名と変数値の接続を解除するだけで、変数値をすぐに破棄するわけではありません。また、関数内で定義されたグローバル変数は、実際には関数内のエイリアスを外部で使用するだけです。 $var1 には引き続き外部からアクセスできます。

例 2: $GLOBALS は、関数内で関数の外で定義された変数にアクセスします。

関数内で $waibu を直接使用するとエラーになります。

$waibu = 'out';
function ff() {
    echo $GLOBALS['waibu'];
}
ff();

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