Blogブログ

PHP 変数のスコープについて

こんにちは!
HLCのサポート担当大谷です!

本業のサポートのかたわら、プログラムの修正等も行っており、ようやくPHPにも少しづつ慣れてきて、難易度の低い内容なら以前よりはサクサクと作れるようになってきたかなと、少し慣れを感じる一方、まだまだ経験が足りず、日々悪戦苦闘を繰り返しております。

そんなタイミングで扱うものかはわかりませんが、本日は変数の種類とスコープについて少しお話をしたいと思います。

正直なところ、PHPについて基本学習なく飛び込んだものですから、基本、ぶつかったら調べて覚える。という、繰り返しでやってきましたが、変数のスコープってあまり意識しなくても困った事は起こりませんでした。
以前から少ーし気にはなってたので、一回調べてみよう、という事で今回のテーマとなりました。
いや、もっと早く調べろという感じですね。はい、すいません。

変数のスコープ

変数のスコープには3つが存在します

  • ・ローカルスコープ
  • ・グローバルスコープ
  • ・スーパーグローバルスコープ
  •  

    ローカルスコープ

    こちらは関数内で定義された変数のスコープですね。
    PHPで一番よく使われるスコープとなるかと思います。
    関数を抜けると開放され、参照出来なくなります。

    function main() {
    
        example();
    
    }
    
    function example() {
    
        $hoge = 'ここでは見える';
        var_dump($hoge); 
    }
    
    実行結果:
    ここでは見える
    
    
    function main() {
    
        example();
        var_dump($hoge);
    
    }
    
    function example() {
    
        $hoge = 'ここでは見える';
         
    }
    
    実行結果:
    未定義エラー
    
    

    グローバルスコープ

    こちらは関数の外で定義された変数のスコープになります。
    ローカルスコープの変数とは違い、いつまでも開放されず残ってしまいます。
    クラスで定義されたりという事はありますが、あまり積極的には使いたくありませんね。
    関数の引数や戻り値で値を渡せば済む事なので、特殊な使い方をする以外では、みなさん本能的に使用を避けているのではないかと思います。
    globalという宣言で、変数を呼び出す事が可能らしいです。知らなかった・・・。でもたぶん使わない。

    
    $hoge = 'ここでは見える';
    
    function main() {
    
        example();
    
    }
    
    function example() {
    
        global $hoge;
        var_dump($hoge);
         
    }
    
    実行結果:
    ここでは見える
    
    

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

    PHPにあらかじめ用意されているどこからでも使用可能な変数です。
    主にWebサーバーから取得された値が格納されています。
    ローカル変数ほどでは無いですが、こちらはたまに使いますね。
    公式によると、現在用意されているのは以下の9種類です。

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

    前述したとおり、あまり意識して使い分けてはいなかったですが、
    何となく思っていたイメージ通りでした。
    次回はconstやstaticについても調べてみたいと思います。
    それではまた。

    大谷

    執筆者

    Developer

    大谷