【PHP基礎知識】$GLOBALS['']和global區別_PHP教程

來源:互聯網
上載者:User
在php程式開發中,很多開發人員沒有注意到$GLOBALS[]和global存在的差別,這兩種寫法其實差別挺大的、並非只是字面上面的差別,下面我來瞭解一下他們的具體差別吧。

具體差別

1.$GLOBALS['var']是外部的全域變數本身(實實在在的外部$var本身)。

2.global $var是外部$var的同名引用或者指標(可以理解為是一個外部$var的替身)。

舉例說明一下:

Copy to Clipboard引用的內容:[www.bkjia.com]$var1 = "test1";
$var2 = "test2";
function test(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test();
echo $var2; // 將輸出 test1
?>

上面代碼的輸出結果為 test1

Copy to Clipboard引用的內容:[www.bkjia.com]$var1 = "test1";
$var2 = "test2";
function test(){
global $var1,$var2;
$var2 = &$var1;
}
test();
echo $var2; // 將輸出test2
?>

上面代碼的輸出有點意外,結果為test2

為什麼會輸出test2呢?其實就是因為$var1的引用指向了$var2的引用地址(通俗的講test函數中的$var1是一個替身)。導致實質的值沒有改變。

我們再來看一個例子。

Copy to Clipboard引用的內容:[www.bkjia.com]$var1 = "test1";
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1; // 什麼也輸出不了
?>

因為$var1已經被真實的刪除了,所以什麼東西輸出不了。

Copy to Clipboard引用的內容:[www.bkjia.com]$var1 = "test1";
function test(){
global $var1;
unset($var1);
}
test();
echo $var1; // 輸出 test1
?>

這次又意外的輸出了test1。證明刪除的只是別名或引用(替身),變數本身的值沒有受到任何的改變。

明白了吧?

也就是說global $var其實就是$var = &$GLOBALS['var']調用外部變數的一個別名而已。

http://www.bkjia.com/PHPjc/363889.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/363889.htmlTechArticle在php程式開發中,很多開發人員沒有注意到$GLOBALS[]和global存在的差別,這兩種寫法其實差別挺大的、並非只是字面上面的差別,下面我來瞭解...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.