php中global和$GLOBALS[]的分析

巴扎黑
發布: 2016-11-23 09:30:36
原創
887 人瀏覽過

Global問題 
php裡面的global的使用。如下範例: 
$name="even";//定義變數name,並初始化 
function echoName() 

//試圖引用函數外面的變數 
echo "myname is ".//試圖引用函數外面的變數 
echo "myname is ".name."
"; 

echoName(); 
?> 
分析: 
上面的程式碼的結果為:"myname is" 。而不是期望中的:"myname is even "。因為函數沒有傳遞參數$name的值,企圖引用外部變量,不會成功。這時候考慮使用global。

於是將上述程式碼改為 
global $name="even";//用global宣告的同時賦值 
function echoName() 

//試圖引用函數外面的變數
".$name."
"; 

echoName(); 
?> 
結果為:Parse error: syntax error, unexpected '=', expecting ',' 或 ';test in Dphp: on line 2 
也即上述程式碼有錯誤。原因是不能在用global宣告變數的同時給變數賦值。
再次更改上述程式碼: 
global $name; 
$name="even";//將global宣告與賦值分開 
function echoName() 
{ myname is ".$name."
"; 

echoName(); 
?> 
    但所得到的結果仍為:"myname is" 。
    原因是global的用法不對,global的正確用法是:"在一個函數中引入外部的一個變量,如果該變量沒有通過參數傳遞進來,那麼就通過global引入進來。" 也就是說,當一個函數引用一個外部變數時,可以在函數內透過global來聲明該變量,這樣該變數就可以在函數中使用了(相當於當作參數傳遞進來)。

於是進一步改動上述程式碼: 
$name="even";//定義變數name,並初始化 
function echoName() 
   global $name;
   echo "myname is ".$name."
"; 

echoName(); 
?> 
此時得到期望中的結果:"myname is even "。 

以上程式碼說明,global是起傳遞參數的作用,而並非使變數的作用域為全域。以下程式碼證明了這一點: 
$name="even";//宣告變數$name,並初始化 
function echoName1() 

//在函數echoName1()裡使用global來宣告$name
global  $name; 
echo "the first name is ".$name."
"; 

function echoName2() 

//在函數echoName2()裡沒有使用gchoName2()來聲明"the second name is ".$name."
"; 

echoName1(); 
echoName2();
?> 

結果是: 
the first name is

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

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

當然,除了透過上述方法外,還可以使用全域數組$GLOBALS來解決問題,在需要用到外部變數的地方,使用$GLOBALS['var']就可以了。例: 
$name="even";//定義變數name,並初始化 
function echoName() 
     {
//透過全域數組$GLOBALS來引用外在變數['name']."
"; 

echoName(); 
?> 
所得的結果為:   myname is even 。 
    另外,使用global和$GLOBALS的時候,要注意大小寫問題,如果大小寫錯誤,關鍵字就不能起作用。 

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!