PHP變數範圍執行個體詳解

來源:互聯網
上載者:User
什麼是變數範圍?

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

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視頻教程》變數的範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.