變數的範圍即它定義的上下文背景(也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 所引入的檔案。例如:
Php程式碼
<?php $a = 1; include 'b.inc'; ?>
這裡變數 $a 將會在包含檔案 b.inc 中生效。但是,在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按缺省情況將被限制在局部函數範圍內。例如:
Php程式碼
<?php $a = 1; /* global scope */ function Test() { echo $a; /* reference to local scope variable */ } Test(); ?>
這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變數 $a,而且在這個範圍內,它並沒有被賦值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆寫。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。 PHP 中全域變數在函數中使用時必須宣告為 global。
global 關鍵字
首先,一個使用 global 的例子:
Example #1 使用 global
在函數中宣告了全域變數 $a 和 $b 之後,對任一變數的所有參考都會指向其全域版本。對於函數能夠宣告的全域變數的最大個數,PHP 沒有限制。 在全域範圍內存取變數的第二個辦法,是用特殊的 PHP 自訂 $GLOBALS 陣列。前面的例子可以寫成:Example #2 使用$GLOBALS 替代globalPhp代碼<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>
的內容。 $GLOBALS 之所以在全域範圍內存在,是因為 $GLOBALS 是一個超全域變數。以下範例顯示了超全域變數的用處:
Example #3 示範超全域變數和作用域的例子
Php程式碼
<?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b;//3 ?>
global和GLGLGL>GLL$Samaf ]是外在的全域變數本身,global $var是外在$var的同名引用或指標
Php程式碼
<?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']; } ?>結果:Notice: Undefined variable: var1 。因為變數var1被unset函數刪除了。 Php代碼
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>結果:印出 1刪除的只是別名引用,本身的數值並沒有受到任何的改變。 global $var其實就是&$GLOBALS['var'],呼叫外部變數的一個別名而已。 上面程式碼中的$var1和$GLOBALS['var1']是指的相同變數的本身。 PHP的global變數的作用是定義全域變量,但是這個全域變數不是應用於整個網站,而是應用於目前頁面,包括include或require的所有檔案。 結論:1.$GLOBALS['var']是外部的全域變數本身 2.global $var是外部$var的同名引用或指標。