【PHP】変数のスコープについて詳しく解説【関数】

【PHP】変数のスコープについて詳しく解説【関数】

変数のスコープとは?

変数のスコープとは、その変数がどこでアクセスできるかを示す範囲のことです。PHPでは主に次のスコープが存在します。

  • ローカルスコープ
  • グローバルスコープ
  • 静的スコープ
  • スーパーグローバル変数

それぞれのスコープについて詳しく見ていきましょう。

ローカルスコープ

関数内で定義された変数は、その関数の内部でのみアクセスできます。これをローカルスコープと呼びます。


function example() {
    $localVar = "これはローカル変数です";
    echo $localVar;
}

example(); // "これはローカル変数です" と表示される
echo $localVar; // エラー: 未定義の変数

関数の外部から $localVar にアクセスしようとすると、エラーになります。

グローバルスコープ

関数の外で宣言された変数は、スクリプト全体で有効ですが、関数の内部では直接アクセスできません。


$globalVar = "これはグローバル変数です";

function example() {
    echo $globalVar; // エラー: 未定義の変数
}

example();

このように、関数内から直接グローバル変数にアクセスすることはできません。

global キーワード

関数内でグローバル変数を使用したい場合は、global キーワードを使用します。


$globalVar = "これはグローバル変数です";

function example() {
    global $globalVar;
    echo $globalVar; // "これはグローバル変数です" と表示される
}

example();

global を使うことで、関数の内部からグローバル変数にアクセスできます。

静的スコープ (static 変数)

通常、関数のローカル変数は関数が終了すると破棄されます。しかし、static キーワードを使うと、関数の呼び出しごとに値が保持されます。


function counter() {
    static $count = 0;
    $count++;
    echo $count . "
"; } counter(); // 1 counter(); // 2 counter(); // 3

static 変数は関数の外部からはアクセスできませんが、関数の中では前回の値を保持し続けます。

スーパーグローバル変数

PHPには、スクリプトのどこからでもアクセス可能なスーパーグローバル変数があります。代表的なものを紹介します。

  • $_GET: クエリパラメータの取得
  • $_POST: フォームデータの取得
  • $_SESSION: セッションデータの管理
  • $_COOKIE: クッキー情報の取得

// URL: example.com/index.php?name=PHP

echo $_GET["name"]; // "PHP" と表示される

スーパーグローバル変数はどこでも利用できるため、スコープの概念を超えてアクセス可能です。

関数の引数のスコープ

関数の引数として渡された変数もローカルスコープになります。


function greet($name) {
    echo "こんにちは、" . $name . "さん!";
}

greet("太郎"); // "こんにちは、太郎さん!"

関数の外部から引数を参照することはできません。

無名関数(クロージャ)のスコープ

PHPでは無名関数(クロージャ)を使って、スコープ内の変数を use キーワードで外部から参照できます。


$message = "こんにちは";

$greet = function() use ($message) {
    echo $message . "!";
};

$greet(); // "こんにちは!"

use を使わないと、無名関数内で外部変数を参照できません。

まとめ

PHPの変数スコープは、コードの可読性やバグの防止に重要な概念です。以下のポイントを押さえましょう。

  • 関数内の変数はローカルスコープ
  • 関数の外の変数はグローバルスコープ
  • 関数内でグローバル変数を使うには global を使う
  • 静的変数 (static) は関数内で値を保持できる
  • スーパーグローバル変数はどこからでもアクセス可能
  • 無名関数では use を使って外部変数を参照できる

PHPのスコープを正しく理解し、適切に変数を管理しましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です