PHP全局變量中的global與$GLOBALS的區(qū)別和用法小結
1.有些場合需要全局變量的出現(xiàn),如下例子:
<?php $name="why";//定義變量name,并初始化 function echoName() { //試圖引用函數(shù)外面的變量 echo "myname is ".$name."<br>"; } echoName(); ?>
上面的代碼的結果為:"myname is" 。而不是期望中的:"myname is why"。因為函數(shù)沒有傳遞參數(shù)$name的值,企圖引用外部變量,不會成功。這時候考慮使用global。
2.于是將上述代碼改為
<?php global $name="why";//用global聲明的同時賦值 function echoName() { //試圖引用函數(shù)外面的變量 echo "myname is ".$name."<br>"; } echoName(); ?>
結果為: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(); ?>
但是得到的結果依然為:"myname is" ,原因是global的用法不對。
global的正確用法是:"在一個函數(shù)中引入外部的一個變量,如果該變量沒有通過參數(shù)傳遞進來,那么就通過global引入進來。" 也就是說,當一個函數(shù)引用一個外部變量時,可以在函數(shù)內(nèi)通過global來聲明該變量,這樣該變量就可以在函數(shù)中使用了(相當于當作參數(shù)傳遞進來)。
4.于是進一步改動上述代碼:
<?php $name="why";//定義變量name,并初始化 function echoName() { //通過global來聲明$name,相當于傳遞參數(shù) global $name; echo "myname is ".$name."<br>"; } echoName(); ?>
此時得到期望中的結果:"myname is why"。
以上代碼說明,global是起傳遞參數(shù)的作用,而并非使變量的作用域為全局。
5.以下代碼證明了這一點:
<?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(); ?>
結果為:
the first name is why
the second name is
上面的結果說明在函數(shù)echoName2()中,$name變量仍然是未知的,因為沒有用global來聲明,也就沒有傳遞進去。同時也證明了global的作用并不是使變量的作用域為全局。
綜上,global的作用就相當于傳遞參數(shù),在函數(shù)外部聲明的變量,如果在函數(shù)內(nèi)想要使用,就用global來聲明該變量,這樣就相當于把該變量傳遞進來了,就可以引用該變量了。
當然,除了通過上述方法外,還可以使用全局數(shù)組$GLOBALS來解決問題,在需要用到外部變量的地方,使用$GLOBALS['var']就可以了。例:
<?php $name="why";//定義變量name,并初始化 function echoName() { //通過全局數(shù)組$GLOBALS來引用外部變量 echo "myname is ".$GLOBALS['name']."<br>"; } echoName(); ?>
得到的結果為:
myname is why 。
到此這篇關于PHP全局變量中的global與$GLOBALS的區(qū)別和使用的文章就介紹到這了,更多相關php global與$GLOBALS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
php 調(diào)用百度sms來發(fā)送短信的實現(xiàn)示例
這篇文章主要介紹了php 調(diào)用百度sms來發(fā)送短信的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11PHP+Mysql+Ajax+JS實現(xiàn)省市區(qū)三級聯(lián)動
最近做了個項目,需要用到省市區(qū)三級聯(lián)動,上網(wǎng)翻了不少資料,于是有了下面的思路和代碼2014-05-05thinkphp3.2.3框架動態(tài)切換多數(shù)據(jù)庫的方法分析
這篇文章主要介紹了thinkphp3.2.3框架動態(tài)切換多數(shù)據(jù)庫的方法,結合實例形式分析了thinkPHP3.2.3框架多數(shù)據(jù)庫切換的配置、使用相關操作技巧與注意事項,需要的朋友可以參考下2020-01-01php函數(shù)mkdir實現(xiàn)遞歸創(chuàng)建層級目錄
當我們想在自己的站點中添加多級目錄時,可以運用php函數(shù)mkdir()來實現(xiàn)這個功能。具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-10-10