博客專欄

        EEPW首頁 > 博客 > 扣丁學堂帶你了解并讀懂PHP變量作用域

        扣丁學堂帶你了解并讀懂PHP變量作用域

        發(fā)布人:only1 時間:2020-09-21 來源:工程師 發(fā)布文章

          現(xiàn)如今,隨著互聯(lián)網(wǎng)科技飛速的發(fā)展和進步,目前在任何一種編程語言中,變量都有一定的生效范圍,比如大部分的PHP變量只有一個單獨的范圍,最常見的是局部變量和全局變量,首先我先來介紹一下局部變量。

          一般來說,局部變量都存在于一個具體的函數(shù)體內(nèi)。在這個函數(shù)體內(nèi)的變量,都可以在函數(shù)體內(nèi)被使用,但是一旦到了函數(shù)外部,這個變量就不存在了。同理,在函數(shù)外的一個變量,在函數(shù)內(nèi)也是無法使用的,請看這個例子:


          $wow='hey!';//聲明一個全局變量


          functionsayHey()


          {


          echo$wow;


          }


          sayHey();//拋出Notice異常:未定義$wow變量


          functionsayHello()


          {


          $hello='Hey!Nicetomeetyou!';


          }


          echo$hello;//同樣報錯:函數(shù)體內(nèi)的變量不可以在外部訪問PHP


          在上面兩個例子中,函數(shù)內(nèi)無法引用函數(shù)外的局部變量,函數(shù)外也無法使用函數(shù)內(nèi)聲明的變量。所以,當你想使用函數(shù)內(nèi)的一個變量的值時,就需要使用return將它返回出函數(shù)體外。同理,函數(shù)之所以有參數(shù),就是因為不能調用外部的變量,所以需要通過傳遞參數(shù)來將一個值傳遞到函數(shù)體內(nèi)。


          使用include或require


          在聲明了變量之后,再引入文件,那么這個文件里的代碼也可以使用這個變量。道理很簡單,就像這樣:


          $wow='hey!';


          include'wow.php';


          //假設以下是wow.php中的代碼


          echo$wow;//正常輸出heyPHP


          $wow在整個作用域(也就是這個文件中)都會生效,所以他是一個全局變量。或者這么說,在函數(shù)體外聲明的變量,自改變量聲明開始,到程序文件末尾,都屬于有效的生效范圍。這種特性對引入的文件也是一樣的。


          GLOBAL


          全局變量


          必須掌握


          在函數(shù)體外聲明的變量其實就可以看做是全局變量,但是由于函數(shù)的特性,他會默認在函數(shù)體內(nèi)優(yōu)先聲明新的變量。所以想要使用函數(shù)體外的變量,就必須使用global關鍵字。請看代碼:


          $wow='Hey!';


          $hello='Welcometowowphp.com';


          functionsayHello()


          {


          //聲明這兩個變量是引用全局變量


          global$wow,$hello;


          echo$wow.''.$hello;


          }


          sayHello();//輸出Hey!Welcometowowphp.comPHP


          注意到標注的第7行里的global關鍵字了嗎,它就可以讓函數(shù)在體內(nèi)使用外部定義的全局變量。除此之外,PHP還提供了一個內(nèi)置數(shù)組$GLOBALS,你也可以用這個數(shù)組來在函數(shù)體內(nèi)調用外部變量:


          $wow='Hey!';


          $hello='Welcometowowphp.com';


          functionsayHello()


          {


          echo$GLOBALS['wow'].''.$GLOBALS['hello'];


          }


          sayHello();//輸出Hey!Welcometowowphp.comPHP


          $GLOBALS是一個關聯(lián)數(shù)組,這個概念會在以后數(shù)組的一章中講到。在$GLOBALS中每一個變量為一個元素,鍵名對應變量名,值對應變量的內(nèi)容。$GLOBALS之所以在全局范圍內(nèi)存在,是因為$GLOBALS是一個超全局變量。同樣,有關超全局變量的介紹,也會在后面的章節(jié)中解釋。


          STATIC


          靜態(tài)變量


          了解即可


          在PHP中還有一種特性叫“靜態(tài)變量”,它僅僅存在于函數(shù)體中。但是在整個函數(shù)執(zhí)行完后,這個值并不會消失,會一直保持更改之后的值。直到這個程序被銷毀。請看一個沒有使用靜態(tài)變量的示例:


          functionechoStatic()


          {


          $a=0;


          echo$a;


          $a++;


          }


          echoStatic();//輸出0


          echoStatic();//輸出0


          echoStatic();//輸出0PHP


          你可以看到,我在函數(shù)體內(nèi)讓$a遞增1,并多次調用這個函數(shù)。但是得到的結果全部都是0。因為每次調用時都會將$a的值設為0并輸出0。將變量加一的$a++沒有作用,因為一旦退出本函數(shù)則變量$a就不存在了。


          那我就想讓他調用一次就加一呢?很簡單,將$a聲明為靜態(tài)變量即可:


          functionechoStatic()


          {


          static$a=0;


          echo$a;


          $a++;


          }


          echoStatic();//輸出0


          echoStatic();//輸出1


          echoStatic();//輸出2PHP


          現(xiàn)在,變量$a僅在第一次調用echoStatic()函數(shù)時被初始化,之后每次調用echoStatic()函數(shù)都會輸出$a的值并加一。


          注意:


          聲明靜態(tài)變量時,必須是一個確定的值。如果是表達式就會報錯,因為靜態(tài)聲明是在PHP被編譯時解析的。


          最后想要學好PHP一定要選擇專業(yè)靠譜的PHP培訓機構,扣丁學堂PHP培訓不僅有專業(yè)的老師和與時俱進的課程體系,還有大量的PHP視頻教程供學員觀看學習,想要學好PHP的小伙伴抓緊時間行動吧??鄱W堂PHP技術交流群:374332265。

        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。



        關鍵詞:

        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 方正县| 嘉祥县| 珠海市| 麻阳| 东源县| 仁化县| 马鞍山市| 得荣县| 崇仁县| 增城市| 天峻县| 绍兴县| 泰宁县| 松滋市| 周口市| 京山县| 济阳县| 兰西县| 枣强县| 柳林县| 湾仔区| 永善县| 郓城县| 紫金县| 山东省| 双鸭山市| 连山| 洞口县| 西青区| 乌兰县| 金溪县| 武山县| 福泉市| 漳平市| 昭通市| 大港区| 化德县| 忻城县| 葵青区| 邯郸县| 内丘县|