什麼是變數的範圍?變數的範圍是指在指令碼的一次生命週期內變數的有效範圍。一般來說有全域和局部之分
PHP中變數的範圍可以分為:超全域(全域變數的特殊類型,在局部範圍裡可直接使用),全域,局部,靜態(是局部變數的特殊類型)在PHP中,全域變數實際上是靜態全域變數,如果不用unset顯式的釋放,那麼等指令碼運行結束全域變數才會被釋放掉局部靜態變數細分可以是 局部靜態函數變數(函數中聲明的static變數),局部靜態成員變數(類中聲明的 static 屬性,被所有類執行個體共用)局部靜態變數只有指令碼運行結束才會被自動釋放 超全域變數:在一個指令碼的任何範圍裡都可以被訪問,這些都是PHP內建的 代碼如下:$GLOBALS$_SERVER$_GET$_POST$_FILES$_SESSION(持久化儲存)$_COOKIE(持久化儲存)$_REQUEST$_ENV全域變數:聲明的變數不在class,function,if等語言結構內部,如果要在class,function,if等語言內部使用,需要用關鍵詞global或者超全域變數$GLOBALS 靜態變數: 在function中使用關鍵詞static聲明的變數,靜態變數的值保留直至指令碼結束局部變數:在class,function,if/while/for等結構語句內部聲明的變數 1.global關鍵詞和$GLOBALS執行個體代碼如下:<?php$a = 0;function foo(){ global $a; echo $a;}function foo2(){ echo $GLOBALS['a'];}2.static 變數和普通局部變數區別執行個體代碼如下:<?phpfunction foo1(){ $var = 0; $var++; return $var;}echo foo1();echo foo1();//輸出都是1function foo (){ static $var = 0; $var++; return var;}echo foo();echo foo();//第一次輸出1 第二次23.static 關鍵詞還可以聲明靜態屬性和靜態方法靜態屬性只能被類調用,而不能被類執行個體調用靜態方法裡不能使用$this,只能用self訪問類的靜態屬性 另外理解static變數的一段代碼: 代碼如下:<?phpclass t{ static $v = 10; public function a() { static $var = 10; $var++; echo $var . "<br>n"; } public static function aa() { self::$v++; echo self::$v . "<br>n"; }}$o1 = new t();$o1->a();//輸出11$o2 = new t();$o2->a();//輸出12t::aa();//輸出11$o1->aa();//輸出12$o2->aa();//輸出13 從上面的代碼中,可知如果一個類成員方法中有靜態變數,即使是不同的類執行個體,他們也會共用這個靜態變數,儘管這個靜態變數不是類靜態成員變數,這點容易讓人迷惑。