關於PHP的global全域變數

來源:互聯網
上載者:User
各位大神好,我從網上看了$_GLOBALS超全域數組和global定義的全域變數區別,區別如下:

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

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

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

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

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

回複內容:

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

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

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

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

按照小白的思維是這樣的:既然已經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) 不會銷毀外部的$var1
看下面的代碼,你會更清晰

global $var1;

約等於

$var1 = $GLOBALS['var1'];
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.