global問題
php裡面的global的使用。如下例子:
<?php
$name="even";//定義變數name,並初始化
function echoname()
echoname();
?>
分析:上面的**的結果為:"myname is" 。而不是期望中的:"myname is even "。因為函式沒有傳遞引數$name的值,企圖引用外部變數,不會成功。這時候考慮使用global。
於是將上述**改為
<?php
global $name="even";//用global宣告的同時賦值
function echoname()
echoname();
?>
結果為:parse error: syntax error, unexpected '=', expecting ',' or ';' in d:\phpserver\www\test\test.php on line 2
也即上述**有錯誤。原因是不能在用global宣告變數的同時給變數賦值。
再次更改上述**:
<?php
global $name;
$name="even";//將global宣告與賦值分開
function echoname()
echoname();
?>
但是得到的結果依然為:"myname is" 。
原因是global的用法不對,global的正確用法是:"在乙個函式中引入外部的乙個變數,如果該變數沒有通過引數傳遞進來,那麼就通過global引入進來。" 也就是說,當乙個函式引用乙個外部變數時,可以在函式內通過global來宣告該變數,這樣該變數就可以在函式中使用了(相當於當作引數傳遞進來)。
於是進一步改動上述**:
<?php
$name="even";//定義變數name,並初始化
function echoname()
echoname();
?>
此時得到期望中的結果:"myname is even "。
以上**說明,global是起傳遞引數的作用,而並非使變數的作用域為全域性。以下**證明了這一點:
<?php
$name="even";//宣告變數$name,並初始化
function echoname1()
function echoname2()
echoname1();
echoname2();
?>
結果為:
the first name is even
the second name is
上面的結果說明在函式echoname2()中,$name變數仍然是未知的,因為沒有用global來宣告,也就沒有傳遞進去。同時也證明了global的作用並不是使變數的作用域為全域性。
綜上,global的作用就相當於傳遞引數,在函式外部宣告的變數,如果在函式內想要使用,就用global來宣告該變數,這樣就相當於把該變數傳遞進來了,就可以引用該變數了。
當然,除了通過上述方法外,還可以使用全域性陣列$globals來解決問題,在需要用到外部變數的地方,使用$globals['var']就可以了。例:
<?php
$name="even";//定義變數name,並初始化
function echoname()
echoname();
?>
得到的結果為: myname is even 。
另外,在使用global和$globals的時候,要注意大小寫問題,如果大小寫錯誤,則關鍵字就不能起作用。
php 中global關鍵字和 GLOBALS用法
首先我們先看一段 a 1 global scope function test test 這個指令碼不會有任何輸出,因為 echo 語句引用了乙個區域性版本的變數 a 而且在這個範圍內,它並沒有被賦值。你可能注意到 php 的全域性變數和 c 語言有一點點不同,在 c 語言中,全域性變數在函式中自動...
php中global與 GLOBAL的用法及區別
php中global 與 globals 差別 原本覺得global和 globals除了寫法不一樣覺得,其他都一樣,可是在實際利用中發現2者的差別還是很大的 先看下面的例子 php 例子1 function test global function test globals var1 5 var2...
PHP中 GLOBALS和global的區別
php 中的許多預定義變數都是 超全域性的 這意味著它們在乙個指令碼的全部作用域中都可用。在函式或方法中無需執行 global variable 就可以訪問它們。這些超全域性變數是 1 globals 引用全域性作用域中可用的全部變數。2 乙個包含了全部變數的全域性組合陣列。變數的名字就是陣列的鍵。...