亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

關(guān)于PHP5和PHP7版本下global變量機(jī)制有哪些變化(global無(wú)效錯(cuò)誤)?(代碼實(shí)測(cè))

來(lái)源:藏色散人 發(fā)布時(shí)間:2019-01-10 10:49:03 閱讀量:917

對(duì)于php程序員來(lái)說(shuō),隨著php不同版本對(duì)于部分函數(shù)變量機(jī)制的更新改進(jìn),往往會(huì)讓大家因在不同版本下使用同一變量而出現(xiàn)不同結(jié)果時(shí)而產(chǎn)生疑惑。那么本篇文章主要給大家詳細(xì)解釋下,為什么在PHP5和PHP7版本下,使用同一global變量時(shí)會(huì)出現(xiàn)不同結(jié)果的問(wèn)題?下面給大家舉一個(gè)簡(jiǎn)單易懂的例子。

比如現(xiàn)有一個(gè)exl.php的頁(yè)面運(yùn)算代碼如下:

我們?cè)诒镜豴hp5版本環(huán)境下運(yùn)行出來(lái)的結(jié)果是5,如下截圖:

那么我們?cè)趐hp7版本環(huán)境下運(yùn)行的結(jié)果是3,如下截圖:

那么之所以會(huì)出現(xiàn)不同運(yùn)算結(jié)果,其實(shí)是因?yàn)樵谧钚碌膒hp7版本中,PHPglobal變量處理機(jī)制進(jìn)行了修改,此版本下global關(guān)鍵字現(xiàn)在只能引用簡(jiǎn)單變量。所以當(dāng)我們?cè)诒镜豴hp5版本環(huán)境下運(yùn)算時(shí),輸出的$y的值就是$x+$y=5,此時(shí)的global就相當(dāng)于全局變量使用。而在php7環(huán)境下,輸出的$y的值卻是$y=3,此時(shí)global變量只能直接引用簡(jiǎn)單變量$y。

那么通過(guò)以上的示例代碼解釋?zhuān)M酒恼玛P(guān)于php中g(shù)lobal變量在不同版本下運(yùn)算產(chǎn)生不同結(jié)果的問(wèn)題,對(duì)大家遇到相關(guān)問(wèn)題時(shí)有所幫助,也希望大家通過(guò)此篇文章對(duì)不同版本下php global用法有所理解。


簡(jiǎn)單介紹下,什么是php全局變量global?首先phpglobal作用域不是應(yīng)用于整個(gè)網(wǎng)站,而是應(yīng)用于當(dāng)前頁(yè)面,包括include或require的所有文件。但是在函數(shù)體內(nèi)定義的global變量,函數(shù)體內(nèi)可以使用,在函數(shù)體外定義的global變量不能在函數(shù)體內(nèi)使用。

這里也順帶提下php $GLOBALS變量 即引用全局作用域中可用的全部變量, 在 $GLOBALS 數(shù)組中,每一個(gè)變量為一個(gè)元素,鍵名對(duì)應(yīng)變量名,值對(duì)應(yīng)變量的內(nèi)容。$GLOBALS 之所以在全局范圍內(nèi)存在,是因?yàn)?$GLOBALS 是一個(gè)超全局變量。注意$GLOBALS 的寫(xiě)法,比如變量$a1,寫(xiě)法為$GLOBALS[‘a(chǎn)1’]。

那么下面用個(gè)淺而易懂得例子給大家詳細(xì)解釋下global在php中出現(xiàn)無(wú)效的問(wèn)題:

首先demo1.php頁(yè)面代碼如下:

1

2

3

4

5

6

7

<?php

    $site_name = 'CodePlayer';

    function sayHi(){

        global $site_name;

        echo "Hello! Welcome to $site_name !";

    }

    ?>

demo2.php頁(yè)面代碼如下:

1

2

3

4

5

6

7

<?php

    function include_view_page(){

        include 'demo2.php';

        sayHi();                  

    }

    include_view_page();

    ?>

當(dāng)我們?cè)L問(wèn)demo1.php頁(yè)面,能夠正確顯示出歡迎語(yǔ)句。然而當(dāng)我們使用瀏覽器訪(fǎng)問(wèn)demo2.php頁(yè)面輸出結(jié)果卻如下:

1

Hello! Welcome to !

我們?cè)诤瘮?shù)include_view_page()中調(diào)用sayHi()函數(shù)時(shí),demo2.php頁(yè)面sayHi()函數(shù)中g(shù)lobal的$site_name卻沒(méi)有被正確識(shí)別、生效。

其實(shí)當(dāng)我們?cè)诤瘮?shù)include_view_page()中include demo2.php頁(yè)面時(shí),demo2.php頁(yè)面的變量$site_name就相當(dāng)于存放在include_view_page()函數(shù)內(nèi)的作用域中。大家都知道在函數(shù)內(nèi)global一個(gè)變量實(shí)際上是在函數(shù)內(nèi)建立一個(gè)對(duì)頁(yè)面全局變量的引用。而在這個(gè)例子中,$site_name變量對(duì)于demo1.php而言,它僅僅是include_view_page()函數(shù)內(nèi)的局部變量,因此無(wú)法顯示global變量,我們進(jìn)行相關(guān)調(diào)用時(shí)是無(wú)法獲取到正確的變量和變量值。

在php中,我們尤其需要注意類(lèi)似上述在函數(shù)內(nèi)include某個(gè)頁(yè)面,導(dǎo)致該頁(yè)面中變量的作用域發(fā)生改變的問(wèn)題。為了避免這種情況,我們應(yīng)該盡量減少多層次的include調(diào)用,也盡量不要在函數(shù)內(nèi)使用include。此外,我們還可以在demo2.php的頁(yè)面中將$site_name進(jìn)行全局變量形式的聲明。

1

2

3

4

5

6

7

8

9

//demo2.php

    <?php

    global $site_name;

    $site_name = 'CodePlayer';

    function sayHi(){

        global $site_name;

        echo "Hello! Welcome to $site_name !";

    }

    ?>

函數(shù)中如何引用全局變量示例如下:

輸出的結(jié)果如下:

var2 is set to ‘xxxxxx’
var2 is set to ‘eeee’

可見(jiàn),上面的代碼中:
$var2 =&$var1; //1 只對(duì)函數(shù)內(nèi)部可見(jiàn)。 而 $GLOBALS[“var2”] =&$var1; //2 在全局范圍內(nèi)可見(jiàn)。

希望本篇文章介紹關(guān)于php global出現(xiàn)無(wú)效的問(wèn)題對(duì)大家有所幫助!


標(biāo)簽: PHP
分享:
評(píng)論:
你還沒(méi)有登錄,請(qǐng)先