各位大神好,我從網路上看了$_GLOBALS超全局數組和global定義的全局變數區別,區別如下:
$GLOBALS['var']是外部的全域變數本身
global $var是對外部$var的同名變數的引用或指針,並不是真正的賦值
所以我便試驗了一下,代碼如下:
<code><?php $var1 = 1; function test(){ global $var1; //变量的引用 unset($GLOBALS['var1']); //销毁变量本身 echo $var1; } test(); ?></code>
依照小白的思維是這樣的:既然已經unset($GLOBALS['var1']);了,那麼變數本身就銷毀了,對變數的引用也就沒有什麼意義了,所有無法輸出結果。
但是我運行了一下,結果卻輸出了1,所以小白我很不能理解,想請大神幫我解釋一下,先謝謝了!
各位大神好,我從網路上看了$_GLOBALS超全局數組和global定義的全局變數區別,區別如下:
$GLOBALS['var']是外部的全域變數本身
global $var是對外部$var的同名變數的引用或指針,並不是真正的賦值
所以我便試驗了一下,代碼如下:
<code><?php $var1 = 1; function test(){ global $var1; //变量的引用 unset($GLOBALS['var1']); //销毁变量本身 echo $var1; } test(); ?></code>
依照小白的思維是這樣的:既然已經unset($GLOBALS['var1']);了,那麼變數本身就銷毀了,對變數的引用也就沒有什麼意義了,所有無法輸出結果。
但是我運行了一下,結果卻輸出了1,所以小白我很不能理解,想請大神幫我解釋一下,先謝謝了!
在php中function裡面的永遠是個私有變量,global在函數產生一個指向函數外部變量的別名變量,而不是單純的外部同名變量的引用或者指針
其實簡單的理解為變數的位址指標問題就好了。
$GLOBALS['var1']
和外部的 $var1
是同一個指針,指向儲存值為1的記憶體位址
global $var1
是外部的 $val1
的指針的一個複製指針,也指向存儲值為1的內存地址
無論$GLOBALS['var1']
或global $var1
,因為指向的值記憶體位址一樣,所以都可以得到修改外部變數的值的目的。
所以:
unset($GLOBALS['var1'])
操作同時銷毀了外部的$var1
test
函數下進行global $val1; unset($val1)
函數下進行global $val1; unset($val1)
函數下進行
global $val1; unset($val1)
看下面的程式碼,你會更清晰
<code><?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1;// 此处输出1</code>
<code><?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1;// 此处报错PHP Notice: Undefined variable: var1</code>
<code>global $var1; </code>
<code>$var1 = $GLOBALS['var1'];</code>