php中global和 GLOBALS 的分析

2021-09-01 15:05:29 字數 1796 閱讀 8336

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 乙個包含了全部變數的全域性組合陣列。變數的名字就是陣列的鍵。...