什麼是變數作用域?
變數在使用是,要符合變數的定義規則。變數必須在有效的範圍使用,如果變數超出了有限範圍,變數也就沒有意義了,就好像我們有一百塊錢,我們可以購買一百塊錢以內的東西,如果物品超出了一百塊錢,那麼這一百塊也就不能用了。一百塊就相當於這個變量,而一百塊以內的範圍就相當於作用域。
PHP的變數由於作用域不同,分為:局部變量,全域變數和靜態變量,如下表:
##作用域 | 說明 |
在函數的內部定義的變數,作用域就是所在的函數範圍 | |
在被定義所有的函數以外的變量,作用域是整個PHP文件,但是在使用者自訂函數內部是不能使用的。如果希望使用者在使用者自訂函數內部使用全域變量,則使用 | global關鍵字聲明全域變數 |
能夠在函數呼叫結束後仍保留變數值,當再次回到其作用域,又可以繼續使用原來的值。而一般變數是在函數呼叫後,其儲存的資料值會被清除,所佔用的記憶體空間也會被釋放。使用靜態變數時,先要用關鍵字 | static來宣告變數,把關鍵字static放在要定義的變數之前 |
在函數內部定義的變量,其作用域為所在的函數,如果在函數外賦值,將被認為是完全不同的另一個變數。在退出宣告變數的函數時,該變數及對應的值就會被清除。
實例
本實例用於比較函數內賦值的變數(局部變數)和函數外賦值的變數(全域變數),實例程式碼如下:<?php header("content-type:text/html;charset=utf-8"); $exam= "在函数外定义"; //声明全局变量 function add(){ $exam="在函数内定义"; //声明局部变量 echo "在函数内输出的内容是:".$exam."<br/>"; //输出局部变量 } add(); //调用函数 echo "在函数外输出的内容是:".$exam; //输出全局变量 ?>運行結果如下:
#靜態變數在很多地方都能用到。例如,在部落格中使用靜態變數記錄瀏覽者的人數,每一次使用者造訪和離開時,都能夠保留目前瀏覽者的人數。在聊天室中也可以使用靜態變數來記錄使用者的聊天內容。
範例
在下面的實例使用靜態變數和普通變數同事輸出一個數據,查看兩者的功能有什麼不同,程式碼如下:
<?php function zdy0(){ static $message = 0; //初始化静态变量 $message+=1; echo $message." "; } function zdy1(){ $message = 0; //初始化静态变量 $message+=1; echo $message." "; } for ($i=0;$i<10;$i++) zdy0(); //输出1~10 echo "<br>"; for ($i=0;$i<10;$i++) zdy1(); //输出10个1 echo "<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的值“PHP中文網”,因為在第6行用global關鍵字聲明了全域變數$zyy。而第5行不會有任何輸出,其中的$zy和第二行的$zy沒有任何關係,實例程式碼如下:<?php header("content-type:text/html;charset=utf-8"); $zy="你好"; $zyy="PHP中文网"; function lxt(){ echo $zy."<br>"; //$zy 不能被调用,没有输出 global $zyy; //利用关键字global 在函数内部说明,不说明认为是私有变量 echo $zyy."<br>"; //调用$zyy } lxt(); ?>程式碼運行結果: 這就是應用全域變數與不應用全域變數的差別,下一節,我們講解「
可變變數」
相關影片教學推薦:《php.cn獨孤九賤(4)-php影片教學》以上是PHP變數作用域實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!