php中global與 GLOBALS的用法及區別

2022-04-29 11:57:09 字數 2005 閱讀 9545

php中global 與 $globals[""] 差別 原本覺得global和$globals除了寫法不一樣覺得,其他都一樣,可是在實際利用中發現2者的差別還是很大的!

先看下面的例子:

php**

<?php

// 例子1

function test_global() 

function test_globals() 

$var1 = 5;

$var2 = $var3 = 0;

test_global();

print $var2 ."n";

test_globals();

print $var3 ."n";

?>

履行效果為:05

怎麼會這樣呢?不該當是2個5嗎?怎麼會出現1個0和1個5呢?

恩,我們儲存以上問題,深入 分析 $globals和global的原理!

我們都知道變數其實是相應物理內存在**中的"代號",

引用php手冊的$globals的解釋 :

global 變數:$globals

注意: $globals 在 php 3.0.0 及以後版本中實用。

由所有已定義全域性變數組成的陣列。變數名就是該陣列的索引。

這是乙個「superglobal」,或者可以描繪為主動全域性變數。

也就是說上面**中的$var1和$globals['var1']是指的同一變數,而不是2個不同的變數!

下面來分析 global到底做了什麼?

我們都知道php中的函式所產生 的變數都是函式的私有變數,那麼global產生的變數也確定逃不出這個規矩,為什麼這麼說呢,看下面的**:

php**

<?php

function test() 

$a = 1;

test();

print $a;

?>

複製**

履行效果為:

1為什麼會輸出1呢?不是已經把$a給unset了嗎?unset失靈了?php的bug?

都不是,其實unset起作用了,是把test函式中的$a給unset掉了,可以在函式後面參加 

print $a;

也就是說global產生 了test函式外部$a的別名 變數「$a」,為了和外面的$a差別

接著回到上面的例子1,看test_global中的這一**「$var2 =& $var1;」,上面是乙個引用賦值運算,也就是$var2將指向var1所指向的物理記憶體位址

所以我們得出乙個結論,在函式中global和$globals的差別在於:

global在函式產生 乙個指向函式外部變數的別名 變數,而不是真正的函式外部變數,一但轉變了別名 變數的指向位址,就會產生一些意料不到情況 ,例如例子1.

$globals確確鑿實呼叫是外部的變數,函式內外會始終維持一致!

可以對照 下面兩個列子:

global:

<?php

function myfunction()

$bar="someting";

myfunction();

echo $bar;

?>

輸出:someting

$global:

<?php

function foo()

$bar = "something";

foo();

echo $bar;

?>

輸出:空

php 的全域性變數和 c 語言有一點點不同,在 c 語言中,全域性變數在函式中主動生效,除非被區域性變數籠罩。這可能引起一些問題,有些人可能漫不經心的轉變乙個全域性變數。php 中全域性變數在函式中應用時必須 申明 為全域性。

應用 global的例子

<?php

$a = 1;

$b = 2;

function sum()

sum();

echo $b;

?> 

以上指令碼的輸出將是 "3"。在函式中申明 了全域性變數 $a 和 $b,任何變數的所有引用變數都會指向到全域性變數

php中global與 GLOBAL的用法及區別

php中global 與 globals 差別 原本覺得global和 globals除了寫法不一樣覺得,其他都一樣,可是在實際利用中發現2者的差別還是很大的 先看下面的例子 php 例子1 function test global function test globals var1 5 var2...

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與 GLOBAL詳解

總結 a 1全域性變數相當於有3個變數,函式外部的變數,函式內部的變數,及 global的超全域性變數。global是全域性唯一的,而 var在為全域性變數的別名。b 無論函式內部外部,只要曾經宣告過全域性變數,則 global為全域性的,無需再次宣告 c 在函式內部unset var1 不會影響外...