PHP中 GLOBALS和global的區別

2021-06-26 22:29:41 字數 1988 閱讀 9195

php 中的許多預定義變數都是「超全域性的」,這意味著它們在乙個指令碼的全部作用域中都可用。在函式或方法中無需執行 global $variable; 就可以訪問它們。

這些超全域性變數是:

1)$globals — 引用全域性作用域中可用的全部變數。

2)乙個包含了全部變數的全域性組合陣列。變數的名字就是陣列的鍵。

3)即出現過的全域性變數,就可以通過$globals這個陣列取得。

4)php生命週期中,

定義在函式體外部的所謂全域性變數,函式內部是不能直接獲得的。

$var = "global variable";

$var2 = "global variable2";

function test()

test();

輸出:

$var in current scope: local variable

$var in global scope: global variable

如上的例子,要訪問外部的$var必須使用 $globals陣列,對於通過include檔案進來的外部全域性變數也適用。函式內部直接訪問外部的全域性變數會出錯。

php 的全域性變數和 c 語言有一點點不同,在 c 語言中,全域性變數在函式中自動生效,除非被區域性變數覆蓋。

php中global也有同樣的功能,它和$globals的區別在於:

1)global在函式產生乙個指向函式外部變數的別名變數,而不是真正的函式外部變數。

function test() 

function test2()

$var1 = 100;

$var2 = $var3 = 0;

test();

echo $var2 ."

";test2();

echo $var3 ."

";

輸出:

0100

2)$globals確確實實呼叫是外部的變數,函式內外會始終保持一致。

function test() 

function test2()

$var1 = 100;

test();

echo $var1 . "

";test2();

echo $var1 . "

";

輸出:

200$var1 undefined錯誤

對於類中的成員變數,類中函式必須使用$this->的方式訪問,不能用$globals方式。

global的作用是定義全域性變數,但是這個全域性變數不是應用於整個**,而是應用於當前頁面,包括include或require的所有檔案。

在函式體內定義的global變數,函式體外可以使用,在函式體外定義的global變數不能在函式體內直接使用,除非在函式體內用global修飾。

$global $a; 

$a=100;

function f()

對於函式內部的全域性變數,外部訪問時使用的是函式內部全域性變數的別名。

function test() 

test();

$var2 = &$var1;

unset($var1);

echo $var2;

輸出:

100從結果可以看出,unset只是斷開變數名與變數值連線,並沒有馬上銷毀變數的值,對於在函式內部定義的全域性變數,實際在外部只是使用了其別名而已,所以在外部依然可以訪問到$var1的值。

函式內部$globals中的全域性變數,函式外部可以直接訪問。

$x = 75; 

$y = 25;

function test()

test();

echo $z;

輸出:

100由於 z 是 $globals 陣列中的變數,因此在函式之外也可以訪問它。 



php中global和 GLOBALS 的分析

global問題 php裡面的global的使用。如下例子 name even 定義變數name,並初始化 function echoname echoname 分析 上面的 的結果為 myname is 而不是期望中的 myname is even 因為函式沒有傳遞引數 name的值,企圖引用外部...

PHP中global與 GLOBALS 區別

根據官方的解釋是 1.globals var 是外部的全域性變數本身。2.global var是外部 var的同名引用或者指標。舉例說明一下 var1 1 var2 2 function test test echo var2 正常列印結果為1 var1 1 var2 2 function test...

php中的global及GLOBALS的一些問題

首先看乙個簡單例子 a scnjl function test test var dump a function test1 test1 var dump a 這裡輸出的結果是 string 5 scnjl null 可以看到其實global在函式中使用的時候,並沒有直接用到變數 a,而是複製了乙個...