什麼是變數範圍?
變數在使用是,要符合變數的定義規則。變數必須在有效範圍使用,如果變數超出了有限範圍,變數也就沒有意義了,就好像我們有一百塊錢,我們可以購買一百塊錢以內的東西,如果物品超出了一百塊錢,那麼這一百塊也就不能用了。一百塊錢就相當於這個變數,而一百塊以內的範圍就相當於範圍。
PHP的變數由於範圍不同,分為:局部變數,全域變數和靜態變數,如下表:
| 範圍 |
說明 |
| 局部變數 |
在函數的內部定義的變數,範圍就是所在的函數範圍 |
| 全域變數 |
在被定義所有的函數以外的變數,範圍是整個PHP檔案,但是在使用者自訂函數內部是不能使用的。如果希望使用者在使用者自訂函數內部使用全域變數,則使用global關鍵字聲明全域變數 |
| 靜態變數 |
能夠在函數調用結束後仍保留變數值,當再次回到其範圍,又可以繼續使用原來的值。而一般變數是在函數調用後,其儲存的資料值會被清除,所佔用的記憶體空間也會被釋放。使用靜態變數時,先要用關鍵字static來聲明變數,把關鍵字static放在要定義的變數之前 |
在函數內部定義的變數,其範圍為所在的函數,如果在函數外賦值,將被認為是完全不同的另一個變數。在退出聲明變數的函數時,該變數及相應的值就會被清除。
執行個體
本執行個體用於比較在函數內賦值的變數(局部變數)和在函數外賦值的變數(全域變數),執行個體代碼如下:
<?phpheader("content-type:text/html;charset=utf-8");$exam= "在函數外定義"; //聲明全域變數function add(){ $exam="在函數內定義"; //聲明局部變數 echo "在函數內輸出的內容是:".$exam."<br/>"; //輸出局部變數}add(); //調用函數echo "在函數外輸出的內容是:".$exam; //輸出全域變數?>
運行結果如下:
靜態變數在很多地方都能用到。例如,在部落格中使用靜態變數記錄瀏覽者的人數,每一次使用者訪問和離開時,都能夠保留目前瀏覽者的人數。在聊天室中也可以使用靜態變數來記錄使用者的聊天內容。
樣本
在下面的執行個體使用靜態變數和普通變數同事輸出一個資料,查看一下兩者的功能有什麼不同,代碼如下:
<?phpfunction zdy0(){ static $message = 0; //初始化靜態變數 $message+=1; echo $message." ";}function zdy1(){ $message = 0; //初始化靜態變數 $message+=1; echo $message." ";}for ($i=0;$i<10;$i++) zdy0(); //輸出1~10echo "<br>";for ($i=0;$i<10;$i++) zdy1(); //輸出10個1echo "<br>";?>
代碼運行結果:
執行個體詳解:
自訂函數zdy()是輸出從1~10共10個數字,而zdy1()函數則輸出的是10個1.,因為自訂函數zdy()含有靜態變數$message,而函數zdy1()中$message是一個普通變數。兩個變數初始化都為0,在分別使用for迴圈調用兩個函數,結果函數zdy()在被調用後保留了靜態變數$message中的值。而靜態變數的初始化只是在函數第一次調用是被執行,以後就不再對其初始化操作了。而函數zdy1()在被調用後,其變數$message失去原來的值,重新被初始化為0.
全域變數可以在程式中的任何地方訪問,但是在使用者自訂函數內部是不能使用的。如果希望使用者在使用者自訂函數內部使用全域變數,要使用global關鍵字聲明全域變數
樣本
下面在自訂函數中應用全域變數與不應用全域變數進行對比。本例中定義兩個全域變數$zy和$zyy,在使用者自訂函數lxt()中,希望在第5,7行調用他們,而程式輸出的結果只有$zyy
的值“topic.alibabacloud.com”,因為在第6行用global關鍵字聲明了全域變數$zyy。而第5行不會有任何輸出,其中的$zy和第二行的$zy沒有任何關係,執行個體代碼如下:
<?phpheader("content-type:text/html;charset=utf-8");$zy="你好";$zyy="topic.alibabacloud.com";function lxt(){ echo $zy."<br>"; //$zy 不能被調用,沒有輸出 global $zyy; //利用關鍵字global 在函數內部說明,不說明認為是私人變數 echo $zyy."<br>"; //調用$zyy}lxt();?>
代碼運行結果:
這就是應用全域變數與不應用全域變數的區別,下一節,我們講解“可變變數”
相關視頻教程推薦:《php.cn獨孤九賤(4)-php視頻教程》變數的範圍