【これだけ】PHPの変数のスコープ【現役エンジニアが解説】
今回は、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種類のスーパーグローバルの変数はそれぞれ連想配列の型となっており、上記のコードのように、キーと値の組み合わせで代入することで、関数内であろうと関数外であろうとどこからでも、アクセスすることができます。