PHP 変数のスコープ
1. PHP変数のスコープ(Scope)
PHPでは、バリアブル(Variables/変数)をスクリプト(Script)内のどこでも宣言できます。
スコープ(Scope)とは、そのバリアブルが参照、あるいは使用できるスクリプト内の範囲を指します。
PHPには、主に以下の3種類のバリアブルスコープが存在します。
- global(グローバル)
- local(ローカル)
- static(スタティック)
2. グローバルスコープ(Global Scope)
ファンクション(Function)の外部で宣言されたバリアブルは、グローバルスコープ(Global Scope)を持ちます。これらはファンクションの外部からのみアクセス可能です。
2.1 使用例:グローバルスコープを持つバリアブル
$x = 5; // グローバルスコープ
function myTest() {
// ファンクション内で x を使用しようとしても動作しません
echo "ファンクション内の変数 x は: $x";
}
myTest();
echo "ファンクション外の変数 x は: $x";3. ローカルスコープ(Local Scope)
ファンクションの内部で宣言されたバリアブルは、ローカルスコープ(Local Scope)を持ちます。そのファンクション内からのみアクセス可能です。
ローカルバリアブルは、ファンクションが呼び出されたときに作成され、ファンクションの実行が終了した瞬間に破棄されます。
3.1 使用例:ローカルスコープを持つバリアブル
function myTest() {
$x = 5; // ローカルスコープ
echo "ファンクション内の変数 x は: $x";
}
myTest();
// ファンクション外で x を使用しようとしても動作しません
echo "ファンクション外の変数 x は: $x";4. スタティックスコープ(Static Scope)
通常、ファンクションの実行が完了すると、その中のバリアブルはすべて削除されます。しかし、後の処理のためにローカルバリアブルの値を保持しておきたい場合があります。
これを実現するには、バリアブルを最初に宣言する際に static キーワードを使用します。これ以降、ファンクションが呼び出されるたびに、そのバリアブルは前回呼び出されたときの値を保持し続けます。
注意: このバリアブルは依然としてファンクションに対してローカルなものです。
4.1 使用例:staticキーワードの活用
function myTest() {
static $x = 0; // スタティックスコープ
echo $x;
$x++;
}
myTest(); // 0 を出力
myTest(); // 1 を出力
myTest(); // 2 を出力5. PHPの global キーワード
global キーワードは、ファンクション内からグローバルバリアブルにアクセスするために使用されます。
これを行うには、ファンクション内部でバリアブル名の前に global キーワードを記述します。
5.1 使用例:globalキーワードによるアクセス
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // 15 を出力6. PHPの $GLOBALS スーパーグローバル
PHPは、すべてのグローバルバリアブルを $GLOBALS[index] という名前のアレイ(Array/配列)に格納しています。index にはバリアブルの名前が入ります。
このアレイはファンクション内からもアクセス可能であり、グローバルバリアブルを直接更新するために使用できます。
6.1 使用例:$GLOBALSによる更新
先ほどの例は、以下のように書き換えることができます。
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // 15 を出力