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的值,企圖引用外部變量,不會成功。這時(shí)候考慮使用global。
2.于是將上述代碼改為
<?php global $name="why";//用global聲明的同時(shí)賦值 function echoName() { //試圖引用函數(shù)外面的變量 echo "myname is ".$name."<br>"; } echoName(); ?>
結(jié)果為:Parse error: syntax error, unexpected '=', expecting ',' or ';' in http:\\xxxxxxx.com on line 2
也即上述代碼有錯(cuò)誤。原因是不能在用global聲明變量的同時(shí)給變量賦值。
3.再次更改上述代碼:
<?php global $name; $name="why";//將global聲明與賦值分開 function echoName() { //試圖引用函數(shù)外面的變量 echo "myname is ".$name."<br>"; } echoName(); ?>
但是得到的結(jié)果依然為:"myname is" ,原因是global的用法不對。
global的正確用法是:"在一個(gè)函數(shù)中引入外部的一個(gè)變量,如果該變量沒有通過參數(shù)傳遞進(jìn)來,那么就通過global引入進(jìn)來。" 也就是說,當(dāng)一個(gè)函數(shù)引用一個(gè)外部變量時(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(); ?>
此時(shí)得到期望中的結(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)去。同時(shí)也證明了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 調(diào)用百度sms來發(fā)送短信的實(shí)現(xiàn)示例
這篇文章主要介紹了php 調(diào)用百度sms來發(fā)送短信的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11PHP+Mysql+Ajax+JS實(shí)現(xiàn)省市區(qū)三級聯(lián)動
最近做了個(gè)項(xiàng)目,需要用到省市區(qū)三級聯(lián)動,上網(wǎng)翻了不少資料,于是有了下面的思路和代碼2014-05-05PHP開發(fā)之用微信遠(yuǎn)程遙控服務(wù)器
微信公眾好的開發(fā)很火,小程序更火。小編給大家分享一個(gè)PHP開發(fā)之用微信遠(yuǎn)程遙控服務(wù)器的實(shí)例代碼,需要的朋友參考下2018-01-01thinkphp3.2.3框架動態(tài)切換多數(shù)據(jù)庫的方法分析
這篇文章主要介紹了thinkphp3.2.3框架動態(tài)切換多數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式分析了thinkPHP3.2.3框架多數(shù)據(jù)庫切換的配置、使用相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-01-01php函數(shù)mkdir實(shí)現(xiàn)遞歸創(chuàng)建層級目錄
當(dāng)我們想在自己的站點(diǎn)中添加多級目錄時(shí),可以運(yùn)用php函數(shù)mkdir()來實(shí)現(xiàn)這個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10php header函數(shù)的常用http頭設(shè)置
這篇文章主要介紹了php header函數(shù)的常用http頭設(shè)置,本文直接給出代碼實(shí)例,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06