ITHACK
~ みんなのIT部門 ~

【PHP】スコープ – 変数の有効範囲

変数には、その変数が使えるコードの有効範囲があります。
この有効範囲をプログラミング用語でスコープと呼び、意図するプログラムを作成するために、必要な知識となります。

ここでは、スコープについて解説します。

  • スコープ

スコープとは

スコープとは変数を使えるコードの有効範囲のことです。
PHPのスコープはグローバルスコープローカルスコープスーパーグローバルスコープの3種類あります。

ローカルスコープ

概要

関数やクラスメソッド、メンバーメソッドなどのブロック(波括弧{})の中で宣言した変数はローカルスコープになります。

ローカルスコープはそのブロック中のみで使うことができ、異なるスコープで同じ変数名を使った場合は、別の変数として扱われます。

サンプルコード

ローカルスコープの動作をサンプルコードで確認しましょう。

<?php

function sample() {
    $a = 5;
    echo $a."\n";
}

sample();

echo $a."\n";

?>
5
PHP Warning:  Undefined variable $a in sample.php on line 10
Warning: Undefined variable $a in sample.php on line 10

4行目でローカルスコープの変数$aを宣言しています。

$aはローカルスコープなので、sample関数のブロック外で使うことはできません。
そのため、10行目の出力はエラーになってしまいます。

グローバルスコープ

概要

関数やクラスメソッド、メンバーメソッドなどのブロック(波括弧{})の外で宣言した変数はグローバルスコープになります。

グローバルスコープは関数などのブロックの外で使うことができ、globalキーワードを使って関数などのブロック中でも使うことができます。

サンプルコード

グローバルスコープの動作をサンプルコードで確認しましょう。

<?php

$a = 5;

function sample() {
    global $a;
    echo $a."\n";
}

sample();

echo $a."\n";

?>
5
5

2行目でグローバルスコープの変数$aを宣言しています。
12行目の出力では問題なく使え、sample関数ではglobalキーワードで$aを使えるようにしています。

スーパーグローバルスコープ

概要

PHPのデフォルトで定義された次の変数はスーパーグローバルスコープになります。

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

スーパーグローバルスコープはプログラム中のどこでも使うことができます。
それぞれの変数については割愛しますが、気になる方は公式ドキュメントをご覧ください。

注意点

globalキーワードはプログラムを複雑にしてしまいます。
そのため、関数内でグローバルスコープの変数や値を使いたい場合は、引数で与えるようにしましょう。

また、他の言語ではif文やfor文などのブロック内の変数はそのブロックの外では使えないことがあるのですが、PHPでは使えるようになっています。
これは可読性を下げてしまう要因になりますので、できるだけ変数を宣言したブロックの外では使わないように心がけましょう。

まとめ

スコープは変数を使えるコードの有効範囲です。
特にローカルスコープ、グローバルスコープを理解することは、意図したプログラムを作成するために必要な知識となりますので覚えていきましょう。