php對global變數的解析是:Global的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。
例
| 代碼如下 |
複製代碼 |
$a = 1; $b = 2; function Sum() { global $a, $b; //在裡面聲明為全域變數 $b = $a + $b; } Sum(); echo $b; ?> |
結果: 3
如果沒有全域變數global在方法內是不能獲得$a,$b值的,所以在方法裡面想用外面的變數就需要先聲明這個變數為全域變數,這樣就可以使用了
總結:在函數體內定義的PHP Global變數,函數體外可以使用,在函數體外定義的global變數不能在函數體內使用,
$glpbal $a; $a=123; function f() { echo $a; //錯誤, }
再看看下面一例
| 代碼如下 |
複製代碼 |
function f() { global $a; $a=123; } f(); echo $a; //正確,可以使用 |
在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按預設情況將被限制在局部函數範圍內(包括include 和 require 匯入的檔案內的變數)!
解釋:A.php檔案的內Test_Global是定義好的第三方函數,該函數用include匯入了B.php檔案內的$a的global全域變數,所以$a被限制在Test_Global局部函數範圍內,所以B.php檔案內的$a的作用範圍都在Test_Global內,而不是作用了整個A.php內….
解決方案:
1. 衝出局部函數
//A.php 檔案
| 代碼如下 |
複製代碼 |
function Test_Global() { Test(); } include 'B.php'; //將include 從局部Test_Global函數中移出 $a = 0 ; Test_Global(); echo $a; ?> //B.php 檔案 function Test() { global $a; $a =1; } ?> |
2.優秀的訪問器
| 代碼如下 |
複製代碼 |
//A.php 檔案 include 'B.php'; $a =0; Set_Global($a); echo $a; ?> //B.php 檔案 function Set_Global(&$var) { $var=1; } ?> |
再來看看$GLOBALS[]
| 代碼如下 |
複製代碼 |
$var1 = 1; $var2 = 2; function test1(){ $GLOBALS['var2'] = &$GLOBALS['var1']; } test1(); echo $var2; //1
$var3 = 1; $var4 = 2; function test2(){ global $var3,$var4; $var4 = &$var3; } test2(); echo $var4; |
//2 為什麼$var2的列印結果是1,而$var4的列印結果為2呢?其實就是因為$var3的引用指向了$var4的引用地址。$var4的實際值並沒有改變。官方的解釋是:$GLOBALS['var']是外部的全域變數本身,global $var是外部$var的同名引用或者指標。
也許這個例子還不是很清晰,我再引入一個例子:
| 代碼如下 |
複製代碼 |
$var1 = 1; function test1(){ unset($GLOBALS['var1']); } test1(); var_dump($var1); //NULL
$var2 = 1; function test2(){ global $var2; unset($var2); } test2(); |
echo $var2; //1 $var1的值被刪除,而$var2的值還存在。這就證明,$var2隻是別名引用,本身的值沒有受到任何的改變。也就是說global $var其實就是$var = &$GLOBALS['var'],調用外部變數的一個別名而已!
http://www.bkjia.com/PHPjc/631248.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631248.htmlTechArticlephp對global變數的解析是:Global的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有文...