今天在寫框架的時候想把SaeMySQL初始化之後作為全局變數使用。但是後來發現PHP中的全局變數和Java或者OC中的全局變數還是有較大區別的。下麵記錄一下php裡面的global的使用相關註意事項。1.有些場合需要全局變數的出現,如下例子: 上面的代碼的結果為:"myname is" 。而不是期望 ...
今天在寫框架的時候想把SaeMySQL初始化之後作為全局變數使用。
但是後來發現PHP中的全局變數和Java或者OC中的全局變數還是有較大區別的。
下麵記錄一下php裡面的global的使用相關註意事項。
1.有些場合需要全局變數的出現,如下例子:
<?php $name="why";//定義變數name,並初始化 function echoName() { //試圖引用函數外面的變數 echo "myname is ".$name."<br>"; } echoName(); /* 何問起 hovertree.com */ ?>
上面的代碼的結果為:"myname is" 。而不是期望中的:"myname is why"。因為函數沒有傳遞參數$name的值,企圖引用外部變數,不會成功。這時候考慮使用global。
2.於是將上述代碼改為
<?php global $name="why";//用global聲明的同時賦值 function echoName() { //試圖引用函數外面的變數 echo "myname is ".$name."<br>"; } echoName(); /* 何問起 hovertree.com */ ?>
結果為:Parse error: syntax error, unexpected '=', expecting ',' or ';' in http:\\xxxxxxx.com on line 2
也即上述代碼有錯誤。原因是不能在用global聲明變數的同時給變數賦值。
3.再次更改上述代碼:
<?php global $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(); /* 何問起 hovertree.com */ ?>
此時得到期望中的結果:"myname is why"。
以上代碼說明,global是起傳遞參數的作用,而並非使變數的作用域為全局。
5.以下代碼證明瞭這一點:
<?php $name="why";//聲明變數$name,並初始化 function echoName1() { //在函數echoName1()里使用global來聲明$name global $name; echo "the first name is ".$name."<br>"; } /* 何問起 hovertree.com */ function echoName2() { //在函數echoName2()里沒有使用global來聲明$name echo "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 。
推薦:http://www.cnblogs.com/roucheng/p/phpshuzu.html