PHP中$GLOBALS和global的區別

不少人都認爲$GLOBALS['var']和global $var只是寫法上不一樣,其實並非這樣php

根據官方的解釋是  $GLOBALS['var']是外部全局變量$var的自己, 而global $var 是外部$var的同名引用函數

下面咱們來舉個例子:code

<?phpio

$var1 = 1;function

$var2 = 2;test

function test()
{
$GLOBALS['var1'] = &$GLOBALS['var2'];
}變量

test();file

echo $var1;引用

正常輸出2co

<?php

$var1 = 1;

$var2 = 2;

function test()
{
global $var1, $var2;
$var2 = &$var1;

echo $var2;

$var2 = '3';
}

test(); // 輸出1

echo $var1; // 輸出3

echo $var2; // 輸出2

test() 函數中的$var1和$var2都是局部變量,只不過加了global後。分別引用指向了全局變量$var1和$var2,當執行了$var2 = &$var1;

局部變量$var2不在引用指向全局變量$var2,而是指向全局變量$var1,換句話來講,局部變量$var2改變不會影響到全局變量$var2,

而會影響到全局變量$var1.

下面再舉個例子來講明官方解釋:

<?php

$var1 = 1;

function test()
{
  unset($GLOBALS['var1']);
}

test();

echo $var1;

 

會報出一個 PHP Notice:  Undefined variable: var1 in /usercode/file.php  的錯誤,說明全局變量已經被刪除了

$var1 = 1;

function test()
{
  global $var1;
  unset($var1);
}

test();

echo $var1;

輸出結果爲 1 ,證實刪除的只是別名,對全局變量$var1的引用,對全局變量$var1並無影響

也就是說 global $var1 就是 $var1 = &$GLOBALS['var1'],調用外部變量的別名而已

相關文章
相關標籤/搜索