PHP 速習チュートリアル

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 を出力