PHP 的變數範圍

函數外的變數只對外面有用,函數內的變數只對內部有用
由此可見,預設情況下,即使變數名稱一樣,函式外和函式內的變數是獨立的

$a = 'a';

function inside()
{
    $a = 'b';
    echo $a;
}

echo $a;
echo "<br />";
inside();

顯示結果:
a
b


只要在函式裡宣告 glogal 就可以取得函式外的變數
也可以修改函式外變數的值

$a = 'a';

function inside()
{
    global $a;
    $a = 'b';
    echo $a;
}

inside();
echo "<br />";
echo $a;

顯示結果:
b
b


在函式內若沒有使用關鍵字 global 就無法取得函式外的變數,也會返回錯誤訊息
Notice: Undefined variable: a in 006.php on line 13

$a = 'a';

function inside()
{
    echo $a;
}

inside();
echo "<br />";
echo $a;

顯示結果:
Notice: Undefined variable: a in 006.php on line 13
a


函式、類別內未經 global 宣告,是無法取得外部的全域變數的

$a = 'a';

function insideFunc()
{
    echo $a;
}

class InsideClass
{
    public $a;
}

echo "在全域腳本中的變數a:";
echo $a;
echo "<br />";
echo "在函式內的變數a:";
InsideFunc();
echo "<br />";
echo "在物件內的變數a:";
$obj = new InsideClass();
echo $obj->a;

顯示結果:
在全域腳本中的變數a:a
在函式內的變數a: Notice: Undefined variable: a in 007.php on line 8
在物件內的變數a:(類別內有宣告變數$a,但類別內的變數$a不會自動變成外部的全域變數,所以只會是空值,不顯示東西)


函式、類別內各自宣告取得外部全域變數的方法

$a = 'a';

function insideFunc()
{
    global $a;
    echo $a;
}

class InsideClass
{
    public $a;
    
    public function __construct()
    {
        $this->a = $GLOBALS['a'];
    }
}

echo "在全域腳本中的變數a:";
echo $a;
echo "<br />";
echo "在函式內取得全域變數a:";
InsideFunc();
echo "<br />";
echo "在物件內取得全域變數a:";
$obj = new InsideClass();
echo $obj->a;

顯示結果:
在全域腳本中的變數a:a
在函式內取得全域變數a:a
在物件內取得全域變數a:a

在類別內要取得全域變數需要透過建構式或其它方法,無法直接宣告類別變數為全域變數


結論:
在一份 php script 中,php script 腳本內的變數為全域變數,而函式、類別內的變數是各自獨立的,
只有在函式內使用關鍵字 global ,類別內的建構式使用 $GLOBALS[‘變數名’] 才可以取得外面的全域變數