【これだけ】PHPの変数のスコープ【現役エンジニアが解説】

PROGRAM

今回は、PHPの変数のスコープについて、ローカルスコープとグローバルスコープに分け、簡単に解説していきます。

ローカルスコープ

ローカルスコープはより狭いスコープになります。

例えば、関数内で定義された変数はローカルスコープであり、関数内でしか使うことができません。

function Hello() {
    $val = "Hello";
    echo $val;
}

Hello(); // "Hello"と出力
echo $val; // ""と出力

上記のコードのように、$valはHelloという関数内でしか定義されていないため、関数の外から$valにアクセスすることはできません。

グローバルスコープ

グローバルスコープは関数外の変数のスコープになります。

関数内で”global 変数名;”を使うことにより、関数の外側で定義された変数を関数内でも使うことができます。

$val = "Hello";

function Hello() {
    global $val;
    echo $val;
}

Hello(); // "Hello"と出力
echo $val; // "Hello"と出力

上記のコードでは、関数の外側で$valが定義されており、”global $val;”によって、Helloという関数の中でもグローバルスコープの$valにアクセスすることができています。

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

スーパーグローバルのスコープはプログラム上のどこでも使うことができる最も広いスコープになります。

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

グローバルスコープとの大きな違いは、関数内でも”global 変数名;”を使わずに、その変数が扱えるということですが、スーパーグローバルの変数は上記の9種類の変数に限られます。

$GLOBALS['val'] = "Hello";

function Hello() {
    echo $GLOBALS['val'];
}

Hello(); // "Hello"と出力
echo $GLOBALS['val']; // "Hello"と出力

9種類のスーパーグローバルの変数はそれぞれ連想配列の型となっており、上記のコードのように、キーと値の組み合わせで代入することで、関数内であろうと関数外であろうとどこからでも、アクセスすることができます。