PHP のグローバル変数 $GLOBALS と global の違い

WBOY
リリース: 2016-06-20 13:04:08
オリジナル
920 人が閲覧しました

この記事では、PHP のグローバル変数 $GLOBALS と global の違いについて説明します。

1. グローバル変数 $GLOBALS

PHP には多くのグローバル変数があります。

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

公式説明: $GLOBALS — グローバル スコープで使用可能なすべての変数を指します。すべての変数を含むグローバル結合配列。変数の名前は配列のキーです。つまり、出現したグローバル変数は $GLOBALS 配列を通じて取得できます。

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

</span>$foo="Example content";</p>test();<br />function test(){<br />    $foo="local variable";<br />    echo '$foo in current scope: '.$foo."<br>";<br />    echo '$foo in global scope: '.$GLOBALS["foo"]."<br>";<br /><p>}</p>
ログイン後にコピー

上記の例では、外部 $foo にアクセスするには、$GLOBALS 配列を使用する必要があります。これは、インクルード ファイルを介して取り込まれる外部グローバル変数にも当てはまります。 PHP の

Global にもそのような関数があります。$GLOBALS との違いは、global は、関数の実際の外部変数ではなく、関数の外部変数を指すエイリアス変数を関数内に生成することです。関数。 $GLOBALS[] は実際には外部変数と呼ばれ、関数の内部と外部で常に一貫性を保ちます。

クラス内のメンバー変数の場合、クラス内の関数は $this-> メソッドを使用してアクセスする必要があり、$GLOBALS メソッドは使用できません。 global の役割はグローバル変数を定義することですが、このグローバル変数は Web サイト全体ではなく、現在のページ (include または require 内のすべてのファイルを含む) に適用されます。

2. 例の説明

<p>function t1(){</p>    global $var1,$var2;<br />    $var2=&$var1;<br />}<br />function t2(){<br />    $GLOBALS['var3']=&$GLOBALS['var1'];<br />}<br />$var1=5;<br />$var2=$var3=0;<br />t1();<br />print $var2."\n";<br />t2();<br /><p>print $var3."\n";</p>
ログイン後にコピー
実行結果は次のとおりです:

0

5

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

例を再度変更します:

<p>function t1(){</p>    global $var1;<br />    $var1=2;<br />    unset($var1);<br />}<br />function t2(){<br />    $GLOBALS['var1']=3;<br />    unset($GLOBALS['var1']);<br />}<br />$var1=1;<br />t1();<br />print $var1."\n";<br />t2();<br /><p>print $var1."\n";</p>
ログイン後にコピー
実行結果には 2;

1 のみが入ります。 is 定義されたすべてのグローバル変数から自動的に形成される配列。変数名は配列のインデックスです。つまり、$GLOBALS['var1'] は関数外の変数 $var1 と同じ変数であるため、$GLOBALS['var1'] が削除されると、変数は存在しなくなり出力できなくなります。

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

2. 「global $var1;」は、関数の外で $var1 を生成するエイリアス変数です。関数の内部にのみ存在します。関数 エイリアス変数を削除しても外部変数には影響しませんが、関数の外部変数の値は変更できます。

おそらく、これとあれの違いを常に知りたいと考えている人もいるでしょう。他のプログラムも含めて、PHP プログラムを学習するときは、オンラインで検索するよりも自分で実験して、結果に基づいて考えることができます。 、より正確です。

PHP がグローバル スコープ内の変数にアクセスするときに何をすべきかについて話しましょう。

例 1:

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

<p>function test_global(){</p>    global $var1;<br />    $var1='ok';<br />    unset($var1);<br />}<br />test_global();<br />$var2=&$var1;<br />unset($var1);<br /><p>echo $var2;</p>
ログイン後にコピー
結果を与えずにプログラムを自分で実行します。関数内の変数にアクセスできます。

結果から分かるように、unset は変数名と変数値を切り離すだけであり、変数値を直ちに破棄するわけではありません。また、関数内で定義されたグローバル変数は実際には関数内のエイリアスのみを使用します。これで外部から $var1 にアクセスできるようになります。

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

<p>$waibu='out';</p>function ff(){<br />    echo $GLOBALS['waibu'];<br />}<br /><p>ff();</p>
ログイン後にコピー
関数内で $waibu を直接使用するとエラーになります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート