關於PHP的global全域變量

WBOY
發布: 2016-10-22 00:14:26
原創
1208 人瀏覽過

各位大神好,我從網路上看了$_GLOBALS超全局數組和global定義的全局變數區別,區別如下:

  1. $GLOBALS['var']是外部的全域變數本身

  2. global $var是對外部$var的同名變數的引用或指針,並不是真正的賦值

所以我便試驗了一下,代碼如下:

<code><?php 
$var1 = 1; 
function test(){ 
    global $var1;                       //变量的引用
    unset($GLOBALS['var1']);            //销毁变量本身
    echo $var1;
} 

test(); 
?></code>
登入後複製
登入後複製

依照小白的思維是這樣的:既然已經unset($GLOBALS['var1']);了,那麼變數本身就銷毀了,對變數的引用也就沒有什麼意義了,所有無法輸出結果。

但是我運行了一下,結果卻輸出了1,所以小白我很不能理解,想請大神幫我解釋一下,先謝謝了!

回覆內容:

各位大神好,我從網路上看了$_GLOBALS超全局數組和global定義的全局變數區別,區別如下:

  1. $GLOBALS['var']是外部的全域變數本身

  2. 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在函數產生一個指向函數外部變量的別名變量,而不是單純的外部同名變量的引用或者指針

其實簡單的理解為變數的位址指標問題就好了。

  1. $GLOBALS['var1'] 和外部的 $var1 是同一個指針,指向儲存值為1的記憶體位址

  2. global $var1 是外部的 $val1 的指針的一個複製指針,也指向存儲值為1的內存地址

  3. 無論$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>
登入後複製
相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!