PHP全局變量中的global與$GLOBALS的區(qū)別和用法小結(jié)
1.有些場合需要全局變量的出現(xiàn),如下例子:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
上面的代碼的結(jié)果為:"myname is" 。而不是期望中的:"myname is why"。因?yàn)楹瘮?shù)沒有傳遞參數(shù)$name的值,企圖引用外部變量,不會成功。這時候考慮使用global。
2.于是將上述代碼改為
<?php
global $name="why";//用global聲明的同時賦值
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
結(jié)果為:Parse error: syntax error, unexpected '=', expecting ',' or ';' in http:\\xxxxxxx.com on line 2
也即上述代碼有錯誤。原因是不能在用global聲明變量的同時給變量賦值。
3.再次更改上述代碼:
<?php
global $name;
$name="why";//將global聲明與賦值分開
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
但是得到的結(jié)果依然為:"myname is" ,原因是global的用法不對。
global的正確用法是:"在一個函數(shù)中引入外部的一個變量,如果該變量沒有通過參數(shù)傳遞進(jìn)來,那么就通過global引入進(jìn)來。" 也就是說,當(dāng)一個函數(shù)引用一個外部變量時,可以在函數(shù)內(nèi)通過global來聲明該變量,這樣該變量就可以在函數(shù)中使用了(相當(dāng)于當(dāng)作參數(shù)傳遞進(jìn)來)。
4.于是進(jìn)一步改動上述代碼:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//通過global來聲明$name,相當(dāng)于傳遞參數(shù)
global $name;
echo "myname is ".$name."<br>";
}
echoName();
?>
此時得到期望中的結(jié)果:"myname is why"。
以上代碼說明,global是起傳遞參數(shù)的作用,而并非使變量的作用域?yàn)槿帧?/p>
5.以下代碼證明了這一點(diǎn):
<?php
$name="why";//聲明變量$name,并初始化
function echoName1()
{
//在函數(shù)echoName1()里使用global來聲明$name
global $name;
echo "the first name is ".$name."<br>";
}
function echoName2()
{
//在函數(shù)echoName2()里沒有使用global來聲明$name
echo "the second name is ".$name."<br>";
}
echoName1();
echoName2();
?>
結(jié)果為:
the first name is why
the second name is
上面的結(jié)果說明在函數(shù)echoName2()中,$name變量仍然是未知的,因?yàn)闆]有用global來聲明,也就沒有傳遞進(jìn)去。同時也證明了global的作用并不是使變量的作用域?yàn)槿帧?/p>
綜上,global的作用就相當(dāng)于傳遞參數(shù),在函數(shù)外部聲明的變量,如果在函數(shù)內(nèi)想要使用,就用global來聲明該變量,這樣就相當(dāng)于把該變量傳遞進(jìn)來了,就可以引用該變量了。
當(dāng)然,除了通過上述方法外,還可以使用全局?jǐn)?shù)組$GLOBALS來解決問題,在需要用到外部變量的地方,使用$GLOBALS['var']就可以了。例:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//通過全局?jǐn)?shù)組$GLOBALS來引用外部變量
echo "myname is ".$GLOBALS['name']."<br>";
}
echoName();
?> 得到的結(jié)果為:
myname is why 。
到此這篇關(guān)于PHP全局變量中的global與$GLOBALS的區(qū)別和使用的文章就介紹到這了,更多相關(guān)php global與$GLOBALS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的資源更新頁面部分,需要的朋友可以參考下2014-06-06
destoon在360瀏覽器下出現(xiàn)用戶被強(qiáng)行注銷的解決方法
這篇文章主要介紹了destoon在360瀏覽器下出現(xiàn)用戶被強(qiáng)行注銷的解決方法,需要的朋友可以參考下2014-06-06
php正確輸出json數(shù)據(jù)的實(shí)例講解
今天小編就為大家分享一篇php正確輸出json數(shù)據(jù)的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
用Simple Excel導(dǎo)出xls實(shí)現(xiàn)方法
因?yàn)榍皫滋鞂懥似恼拢胮hp-excel-reader類導(dǎo)入excel內(nèi)容,順便說些excel導(dǎo)出問題,需要的朋友可以了解下2012-12-12
laravel migrate初學(xué)常見錯誤的解決方法
之前給大家介紹了關(guān)于laravel migrate入門的基礎(chǔ),下面這篇文章主要給大家介紹了關(guān)于laravel migrate初學(xué)時常見錯誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10

