首先我們先看一段程式碼
<?php $a = 1 ; /* global scope */ function Test () { echo $a ; /* reference to local scope variable */ } Test (); ?>
這個腳本不會有任何輸出,因為echo 語句引用了一個局部版本的變數 $a ,而且在這個範圍內,它並沒有被賦值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆寫。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。 php 中全域變數在函數中使用時必須宣告為 global。
global 關鍵字
首先,一個使用 global 的例子,程式碼如下:
<?php $a = 1 ; $b = 2 ; function Sum () { global $a , $b ; $b = $a + $b ; } Sum (); echo $b ; ?>
以上腳本的輸出將是「3」。在函數中宣告了全域變數 $a 和 $b 之後,對任一變數的所有引用都會指向其全域版本。對於函數能夠宣告的全域變數的最大個數,PHP 沒有限制。
在全域範圍內存取變數的第二個方法,是用特殊的 PHP 自訂 $GLOBALS 陣列。前面的例子可以寫成:
Example #2 使用 $GLOBALS 取代 global,程式碼如下:
<?php $a = 1 ; $b = 2 ; function Sum () { $GLOBALS [ 'b' ] = $GLOBALS [ 'a' ] + $GLOBALS [ 'b' ]; } Sum (); echo $b ; ?>
$GLOBALS 是一個關聯數組,每個變數為一個元素,鍵名對應變數名,值對應變數的內容。 $GLOBALS 之所以在全域範圍內存在,是因為 $GLOBALS 是一個超全域變數。以下範例顯示了超全域變數的用處:
Example #3 示範超全域變數和作用域的範例
<?php function test_global () { // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。 global $HTTP_POST_VARS ; echo $HTTP_POST_VARS [ 'name' ]; // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。 echo $_POST [ 'name' ]; } ?>
以上是php 中global關鍵字和$GLOBALS用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!