2017-05-08 19 views
1

問題

爲什麼unset函數在全局函數和$ GLOBALS之間有所不同?

這裏是我的代碼,$GLOBALS版本將不會回顯,但global會回顯「hi」。

//$GLOBALS version 
<?php 
function foo() 
{ 
     unset($GLOBALS['bar']); 
} 
$bar ="hi"; 
foo(); 
echo $bar; 
?> 

上述回聲無碼

,但是當我改變$GLOBALS['bar']global $bar,它呼應「喜」

//global version 
<?php 
function foo() 
{ 
     global $bar; 
     unset($bar); 
} 

$bar = "hi"; 
foo(); 
echo $bar; 
?> 

我在谷歌和php搜索手動,但它似乎沒有詳細說明這個問題。 what is the difference between GLOBALS and GLOBAL?

回答

1

使用global語句在函數範圍內導入的真正的全局變量實際上會創建對全局變量的引用。當您使用unset()時,它會取消引用全局變量的變量,與其他引用相同。當您取消設置參考時,您只需打破變量名稱和變量內容之間的綁定。這並不意味着變量內容將被破壞。例如:

$a = 1; 
//assign a reference to $a 
$b =& $a; 
unset($b); 
var_dump($a); 

產量:int(1)Unsetting References

當您訪問$GLOBALS時,您正在訪問superglobal陣列並取消設置陣列中包含的實際變量。

相關問題