PHP入門 第16回 スコープ
特定の変数が参照できる範囲を、「スコープ」といいます。
PHPには、
- グローバル
- 関数
- クラス
の3つのスコープが利用できます。
スコープ名 | 説明 |
グローバルスコープ | グローバル変数が参照できるスコープ |
関数スコープ | 関数内のスコープ |
クラススコープ | クラス内のスコープ |
関数および、クラススコープは、関数またはクラスごとに独立しています。
関数やクラスのメソッドで定義された変数はローカル変数と呼ばれ、他のスコープからローカル変数を参照することはできません。
PHPのグローバルスコープ変数は、オートグローバルと呼ばれる変数(後述)を除き、関数およびクラススコープから直接参照できません。
グローバルスコープ変数は、関数などからはglobal文を使用してグローバル変数であることを宣言した後に使用できるようになります。
そうしないと、グローバル変数とは別のローカル変数として宣言されたことになるので注意が必要です。
PHPのグローバル変数は、$GLOBALSという配列に格納されています。
$GLOBALSは、、どのスコープからでも参照可能なオートグローバル変数の一つです。
globalキーワード
変数宣言時にglobalを宣言することで、関数、クラス内でローカル変数でなくグローバル変数を参照できるようになります。
例)
下記、例では「3」を出力します。global宣言がない場合との違いを確かめてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> |
出力結果)
global宣言を行わない例)
グローバル宣言を行わない場合は、ローカル変数として宣言されグローバル変数の値には変化はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $a = 1; $b = 2; function Sum() { $a; $b; $b = $a + $b; } Sum(); echo $b; ?> |
出力結果)
グローバル変数とローカル変数の関係を調べた例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<pre> <?php $var = "グローバル変数\r\n"; function test() { echo $var; //未定義のローカル変数 $var = "test関数のローカル変数\r\n"; //test()のローカル変数 echo $var; //test関数のローカル変数と出力 echo $GLOBALS["var"]; //オートグローバル変数の$GLOBALS配列から //グローバル変数$varを参照 global $var; //グローバル変数の$varを宣言 echo $var; //グローバル変数を出力 } test(); ?> </pre> |
出力結果)
オートグローバル変数
オートグローバル変数には以下の種類があります。
使えるようにしておきましょう。
変数名 | 説明 |
$GLOBALS | グローバル変数用の配列 |
$_GET | HTTPリクエストのGETで送信されてきたクエリー文字列をパースし値を保存した配列 |
$_POST | HTTPリクエストのPOSTで送信されたフォームの値を保持した配列 |
$_COOKIE | COOKIEの値を保持した配列 |
$_FILES | HTTPファイルアップロード用の配列 <input type="file">にてファイルアップロードを行った場合に使用 |
$_REQUEST | $_GET,$_POST,$_COOKIEの値を保持した配列 |
$_SERVER | Webサーバーに関する情報を保持した配列 |
$_ENV | 環境変数を保持した配列 |
$_SESSION | HTTPセッション情報を保持した配列 |
コメント:0件
トラックバック:1件
[...] 第16回 スコープ [...]