UPDATE:2024年08月06日
PHP $GLOBALS(グローバル変数)のすべて!【初心者向け基本】
目次 [閉じる]
$GLOBALS(グローバル変数) 簡単まとめ
1 Minute Note
- $GLOBALS は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $GLOBALS は グローバルスコープで使用可能な変数への参照を含む変数
- $GLOBALS は 連想配列として使用する
- $GLOBALS は 参照先変数の変数名が配列のキーとなる
- $GLOBALS は スーパーグローバル変数であり、コード中どこからでも使用可能
- $GLOBALS は、関数やメソッドの内部で使用する場合、global $GLOBALS; とする必要がない
- $GLOBALSの値を操作すると参照元のグローバル変数も値が変わる
- $GLOBALSは、PHPで常に使用可能
$GLOBALS(グローバル変数)とは
簡単な例で、GLOBALS変数を呼び出してみましょう。
1 2 3 4 5 | <?php $var = '変数です。';//グローバルスコープのグローバル変数 echo $var."<br>\n"; echo $GLOBALS['var']."<br>\n";//グローバル変数の参照を含む ?> |
結果は
変数です。
となります。
GLOBALS変数は $var というグローバルスコープを持つグローバル変数の参照を含んでいるので、$GLOBALS['var'] で $var の内容を呼び出すことが出来ます。GLOBALS変数は連想配列として使用しますが、$varの識別子(名前)の 'var' が連想配列のキー名になります。
グローバルスコープで使用可能な変数の説明をします。スコープとは変数の宣言の場所とその影響範囲のことです。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類あります。変数のスコープについてはこちらを参照下さい。
グローバルスコープを持つ変数の宣言場所は、関数の外部です。影響範囲はコード中全般です。ですが、別のファイルからは呼び出せません(ページを跨いで呼び出すことは出来ません)。定義したファイル上であれば、何処からでも呼出し可能ということです。また、グローバル変数は関数の内部からはアクセスできません(globalキーワードを使用することで関数の内部からもアクセスできます。)。
例えば、
var.php というファイルの関数の外部で変数を定義します。
1 2 3 4 5 | <?php //var.php //グローバル変数の定義 $var = '変数です。'; ?> |
$var は、var.php 上であれば何処からでも呼び出せるグローバルスコープのグローバル変数になります。
ちなみに PHP は上から順番に処理していくので、変数は呼び出す前に定義する必要があります。
このようなグローバル変数の参照を含むのが GLOBALS変数 です。
従って以下のように $var は GLOBALS変数でも参照できます。
1 2 3 4 5 | <?php $var = '変数です。'; echo $var."<br>\n"; echo $GLOBALS['var']."<br>\n"; ?> |
結果は
変数です。
となります。
$GLOBALSを日本語読みにするとグローバル変数と言います。また、関数外部で定義した変数、例えば $name = '山田'; の $name もグローバル変数と言います。
ですが、2つは違うものです。
- $GLOBALS は、すべてのスコープ(影響範囲)を持つスーパーグローバル変数です。
- $name は、グローバルスコープ(影響範囲)を持つグローバル変数です。
$GLOBALSもグローバル変数と言いますが読み方だけです。実際はスーパーグローバル変数です。混同しないように注意して下さい。
変数のスコープについてはこちらを参照下さい。
$GLOBALSはPHPの定義済み変数
PHPの定義済み変数はスーパーグローバル変数とも言います。
$GLOBALS = PHPの定義済み変数 = スーパーグローバル変数
また、$GLOBALSは自動グローバル変数とも呼ばれます。
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)
$GLOBALSは、他のスーパーグローバル変数とは異なり、PHPで常に使用可能です。
PHPの定義済み変数(=スーパーグローバル変数)
$GLOBALS (グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照 ・連想配列として使用 |
---|---|
$_SERVER (サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用 |
$_GET (ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST (ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES (ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST (リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION (セッション変数) | ・セッション変数 ・連想配列として使用 |
$_ENV (環境変数) | ・環境変数 ・連想配列として使用 |
$_COOKIE (クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。
※注意2:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。
可変変数についてはこちらを参照下さい。
$GLOBALSは連想配列で使用する
1 2 3 4 5 | <?php $var = '変数です。'; echo $var."<br>\n"; echo $GLOBALS['var']."<br>\n"; ?> |
結果は
変数です。
となります。
$GLOBALSはコード中何処からでも使用可能
1 2 3 4 5 6 7 8 9 10 11 | <?php //グローバル変数を定義 $sHelloWorld = 'Hello World !!'; //関数を定義 function HelloWorld(){ //globalキーワードで呼び出す必要がありません。 echo $GLOBALS['sHelloWorld']."<br>\n"; } //関数をコール HelloWorld(); ?> |
結果は
となります。
$GLOBALSを関数やメソッドの内部で使用する場合
通常、関数外部で宣言された変数は global キーワードで引き渡さなければ、関数内部で利用できません。
例えば、
1 2 3 4 5 6 7 | <?php $name = '山田'; function hello(){ echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
global キーワードで関数内部へ変数を引き渡すと
1 2 3 4 5 6 7 8 | <?php $name = '山田'; function hello(){ global $name; echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
ですが、$GLOBALSを使用すると global $GLOBALS; と宣言しなくても関数内部で使用できます。
1 2 3 4 5 6 7 | <?php $name = '山田'; function hello(){ echo 'こんにちは、'.$GLOBALS['name'].'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
$GLOBALSを関数内部で使用すると値を保持する
$GLOBALSを関数内部で使用すると値を保持します。$GLOBALSにはスタティック変数としてのスコープがあるためです。
1 2 3 4 5 6 7 8 9 10 11 | <?php $int = 1; function count1(){ $GLOBALS['int']++; } //加算 count1();count1();count1(); echo "$int<br>"; echo $GLOBALS['int']; ?> |
結果は
4
となります。
参照元のグローバル変数 $int にも値が加わります。
$GLOBALSから参照元のグローバル変数を変更
$GLOBALSの値を変更すると参照元のグローバル変数の値も変わります。
1 2 3 4 5 6 7 8 | <?php //グローバル変数を定義 $count = 1; //$GLOBALSから参照元のグローバル変数へアクセス $GLOBALS['count']++; //参照元のグローバル変数を呼び出す echo $count."<br>\n"; ?> |
結果は
となります。
様々型のグローバル変数に $GLOBALS からアクセス
様々型のグローバル変数に $GLOBALS からアクセスできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php //グローバル変数を作成 $str = '文字列'; $int = 1; $float = 2.2; $array = array('name' => 'taro'); $true = TRUE; //グローバル変数にアクセス echo "グローバル変数にアクセス<br>\n"; echo $str."<br>\n"; echo $int."<br>\n"; echo $float."<br>\n"; echo $array['name']."<br>\n"; echo $true."<br>\n"; //スーパーグローバル変数$GLOBALSにアクセス echo 'スーパーグローバル変数$GLOBALSにアクセス<br>'."\n"; echo $GLOBALS['str']."<br>\n"; echo $GLOBALS['int']."<br>\n"; echo $GLOBALS['float']."<br>\n"; echo $GLOBALS['array']['name']."<br>\n"; echo $GLOBALS['true']."<br>\n"; ?> |
結果は
文字列
1
2.2
taro
1
スーパーグローバル変数$GLOBALSにアクセス
文字列
1
2.2
taro
1
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | <h3>$GLOBALS</h3> <?php //グローバル変数を作成 $sGlobalVariable = 'グローバル変数です。'; //グローバル変数にアクセス echo $sGlobalVariable."<br>\n"; //スーパーグローバル変数$GLOBALSにアクセス echo $GLOBALS['sGlobalVariable']."<br>\n"; ?> <h3>様々な型のグローバル変数と$GLOBALS</h3> <?php //グローバル変数を作成 $str = '文字列'; $int = 1; $float = 2.2; $array = array('name' => 'taro'); $true = TRUE; //グローバル変数にアクセス echo "グローバル変数にアクセス<br>\n"; echo $str."<br>\n"; echo $int."<br>\n"; echo $float."<br>\n"; echo $array['name']."<br>\n"; echo $true."<br>\n"; //スーパーグローバル変数$GLOBALSにアクセス echo 'スーパーグローバル変数$GLOBALSにアクセス<br>'."\n"; echo $GLOBALS['str']."<br>\n"; echo $GLOBALS['int']."<br>\n"; echo $GLOBALS['float']."<br>\n"; echo $GLOBALS['array']['name']."<br>\n"; echo $GLOBALS['true']."<br>\n"; ?> <h3>関数の内部で$GLOBALSを使用</h3> <?php //グローバル変数を定義 $sHelloWorld = 'Hello World !!'; //関数を定義 function HelloWorld(){ //globalキーワードで呼び出す必要がありません。 echo $GLOBALS['sHelloWorld']."<br>\n"; } //関数をコール HelloWorld(); ?> <h3>$GLOBALSから参照元のグローバル変数を変更</h3> <?php //グローバル変数を定義 $count = 1; //$GLOBALSから参照元のグローバル変数へアクセス $GLOBALS['count']++; //参照元のグローバル変数を呼び出す echo $count."<br>\n"; ?> <h3>$GLOBALSを関数内部で使用すると値を保持する</h3> <?php $int = 1; function countInt(){ $GLOBALS['int']++; } //加算 countInt();countInt();countInt(); echo $GLOBALS['int']; ?> |
$GLOBALS
グローバルスコープのグローバル変数
グローバルスコープのグローバル変数
様々な型のグローバル変数と$GLOBALS
グローバル変数にアクセス
文字列
1
2.2
taro
1
スーパーグローバル変数$GLOBALSにアクセス
文字列
1
2.2
taro
1
関数の内部で$GLOBALSを使用
Hello World !!
$GLOBALSから参照元のグローバル変数を変更
2
$GLOBALSを関数内部で使用すると値を保持する
4
タグ(=記事関連ワード)
日付
最終更新日:2024年08月06日