【PHP】変数のスコープを理解する

PHPの変数のスコープ

スコープとは

英語で直訳すると Scope = 範囲 。
PHPの時に解釈するのであれば「有効範囲」の方がしっくり来る。変数の有効範囲の解説

グローバルスコープ と ローカルスコープ

サンプルコード

基本的なスコープの考え方

<?php

    $scope_a = 5;
    $scope_b = 10;
    //上記2つがグローバルスコープ変数
    
    function getNum()
    {
        $scope_a = 4;
        //ローカルスコープ変数
        //ユーザー関数内で定義された変数はローカルスコープ変数となり、
        //同じ名前であってもグローバルスコープ関数とは別の物となる。
        
        return $scope_a;
        
    }
    
    echo getNum();
    //出力結果: 4
    //getNumから参照できる変数は関数内で
    //定義されている$scope_aとなるため結果は「4」

?>

global を明示的に宣言する

<?php

    $scope_a = 5;
    $scope_b = 10;
    //上記2つがグローバルスコープ変数
    
    function getNum()
    {
        global $scope_a ;
        //ローカルスコープ変数ではない
        //変数の前に global を付ける事で明示的に
        //グローバルスコープ変数を使用する事ができる
         
        return $scope_a;
        
    }
    
    echo getNum();
    //出力結果: 5

?>

この方法を使用する事でグローバルスコープで宣言された変数を使う事ができるがプログラムの規模が大きくなると思わぬバグが発生する事がある。

if, for ブロック

if と for 内についてはグローバル関数がそのまま利用できます。そのため以下の書き方をした場合、意図せぬ動作になるためブロック内での宣言する関数名を気をつける必要があります。

<?php
    $int = 10;
    
    echo $int;
    //出力結果: 10
    
    for ($int = 0; $int <= 3; $int++) 
    {
        echo $int;
    }
    
    echo "最終出力";
    echo $int;
    
?>

出力結果

    10
    0
    1
    2
    3
    最終出力
    4

最後の$intは一番上で宣言した10を期待しましたが出力されませんでした。for文の条件で宣言している変数とfor文上で宣言している変数名が同じため上書きされた状態になります。

PHP: 変数のスコープ

タイトルとURLをコピーしました