[PHP]全域變數:global與$GLOBALS的區別和使用

來源:互聯網
上載者:User

今天在寫架構的時候想把SaeMySQL初始化之後作為全域變數使用。
但是後來發現PHP中的全域變數和Java或者OC中的全域變數還是有較大區別的。
下面記錄一下php裡面的global的使用相關注意事項。
1.有些場合需要全域變數的出現,如下例子:

<?php$name="why";//定義變數name,並初始化function echoName(){//試圖引用函數外面的變數echo "myname is ".$name."<br>";}echoName();?>


上面的代碼的結果為:"myname is" 。而不是期望中的:"myname is why"。因為函數沒有傳遞參數$name的值,企圖引用外部變數,不會成功。這時候考慮使用global。

2.於是將上述代碼改為

<?phpglobal $name="why";//用global聲明的同時賦值function echoName(){//試圖引用函數外面的變數echo "myname is ".$name."<br>";}echoName();?>

結果為:Parse error: syntax error, unexpected '=', expecting ',' or ';' in http:\\xxxxxxx.com on line 2
也即上述代碼有錯誤。原因是不能在用global聲明變數的同時給變數賦值。

3.再次更改上述代碼:

<?phpglobal $name;$name="why";//將global聲明與賦值分開function echoName(){//試圖引用函數外面的變數echo "myname is ".$name."<br>";}echoName();?>

但是得到的結果依然為:"myname is" ,原因是global的用法不對。

global的正確用法是:"在一個函數中引入外部的一個變數,如果該變數沒有通過參數傳遞進來,那麼就通過global引入進來。" 也就是說,當一個函數引用一個外部變數時,可以在函數內通過global來聲明該變數,這樣該變數就可以在函數中使用了(相當於當作參數傳遞進來)。

4.於是進一步改動上述代碼:

<?php$name="why";//定義變數name,並初始化function echoName(){//通過global來聲明$name,相當於傳遞參數global $name;echo "myname is ".$name."<br>";}echoName();?>

此時得到期望中的結果:"myname is why"。
以上代碼說明,global是起傳遞參數的作用,而並非使變數的範圍為全域。

5.以下代碼證明了這一點:

<?php$name="why";//聲明變數$name,並初始化function echoName1(){//在函數echoName1()裡使用global來聲明$nameglobal  $name;echo "the first name is ".$name."<br>";}function echoName2(){//在函數echoName2()裡沒有使用global來聲明$nameecho "the second name is ".$name."<br>";}echoName1();echoName2();?>

結果為:

the first name is why
the second name is

上面的結果說明在函數echoName2()中,$name變數仍然是未知的,因為沒有用global來聲明,也就沒有傳遞進去。同時也證明了global的作用並不是使變數的範圍為全域。

綜上,global的作用就相當於傳遞參數,在函數外部聲明的變數,如果在函數內想要使用,就用global來聲明該變數,這樣就相當於把該變數傳遞進來了,就可以引用該變數了。

當然,除了通過上述方法外,還可以使用全域數組$GLOBALS來解決問題,在需要用到外部變數的地方,使用$GLOBALS['var']就可以了。例:

<?php$name="why";//定義變數name,並初始化function echoName(){//通過全域數組$GLOBALS來引用外部變數echo "myname is ".$GLOBALS['name']."<br>";}echoName();?>

得到的結果為:   myname is why 。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.