首頁  >  文章  >  後端開發  >  PHP變數作用域實例詳解

PHP變數作用域實例詳解

怪我咯
怪我咯原創
2017-04-27 17:12:332318瀏覽

什麼是變數作用域?

變數在使用是,要符合變數的定義規則。變數必須在有效的範圍使用,如果變數超出了有限範圍,變數也就沒有意義了,就好像我們有一百塊錢,我們可以購買一百塊錢以內的東西,如果物品超出了一百塊錢,那麼這一百塊也就不能用了。一百塊就相當於這個變量,而一百塊以內的範圍就相當於作用域。

PHP的變數由於作用域不同,分為:局部變量,全域變數和靜態變量,如下表:

局部變數在函數的內部定義的變數,作用域就是所在的函數範圍全域變數在被定義所有的函數以外的變量,作用域是整個PHP文件,但是在使用者自訂函數內部是不能使用的。如果希望使用者在使用者自訂函數內部使用全域變量,則使用 靜態變數能夠在函數呼叫結束後仍保留變數值,當再次回到其作用域,又可以繼續使用原來的值。而一般變數是在函數呼叫後,其儲存的資料值會被清除,所佔用的記憶體空間也會被釋放。使用靜態變數時,先要用關鍵字
##作用域 說明
global關鍵字聲明全域變數
static來宣告變數,把關鍵字static放在要定義的變數之前

在函數內部定義的變量,其作用域為所在的函數,如果在函數外賦值,將被認為是完全不同的另一個變數。在退出宣告變數的函數時,該變數及對應的值就會被清除。 PHP變數作用域實例詳解

實例

本實例用於比較函數內賦值的變數(局部變數)和函數外賦值的變數(全域變數),實例程式碼如下:

<?php
header("content-type:text/html;charset=utf-8");

$exam= "在函数外定义";                                     //声明全局变量

function add(){

    $exam="在函数内定义";                                //声明局部变量
    echo "在函数内输出的内容是:".$exam."<br/>";         //输出局部变量
}
add();                                                  //调用函数
echo "在函数外输出的内容是:".$exam;                    //输出全局变量


?>

運行結果如下:

PHP變數作用域實例詳解

#靜態變數在很多地方都能用到。例如,在部落格中使用靜態變數記錄瀏覽者的人數,每一次使用者造訪和離開時,都能夠保留目前瀏覽者的人數。在聊天室中也可以使用靜態變數來記錄使用者的聊天內容。

範例

在下面的實例使用靜態變數和普通變數同事輸出一個數據,查看兩者的功能有什麼不同,程式碼如下:

<?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>";
?>

程式碼運行結果:

PHP變數作用域實例詳解

實例詳解:

自訂函數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變數作用域實例詳解

這就是應用全域變數與不應用全域變數的差別,下一節,我們講解「

可變變數

相關影片教學推薦:《php.cn獨孤九賤(4)-php影片教學》

變數的作用域

以上是PHP變數作用域實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn