用PHP開發項目,不可避免的會使用到全局變量,比如一些網站的配置信息,全站通用,那就可以在一個地方設置,然後多個地方調用。
把變量定義爲全局變量可以有兩種方法:global和$GLOBALS[]。很多人都認爲global和$GLOBALS[]只是寫法不同而已,其實是有差別的。
先來看看global
php對global變量的解析是:global的作用是定義全局變量,但是這個全局變量不是應用於整個網站,而是應用於當前頁面,包括include或require的所有文件。
看一下下面一段PHP代碼:
- $a=123;
- function test1(){
- global $a; //如果不把$a定義爲global變量,函數體內是不能訪問$a的
- echo $a; //123
- }
- test1();
- global $b;
- $b = 456;
- function test2(){
- var_dump($b); //NULL
- }
- test2();
- function test3(){
- global $c;
- $c=789;
- }
- test3();
- echo $c; //789
- $a=123;
- function test1()
- {
- global $a; //如果不把$a定義爲global變量,函數體內是不能訪問$a的
- echo $a; //123
- }
- test1();
- global $b;
- $b=456;
- function test2()
- {
- var_dump($b); //NULL
- }
- test2();
- function test3()
- {
- global $c;
- $c=789;
- }
- test3();
- echo $c; //789
再來看看$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
- $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
也許這個例子還不是很清晰,我再引入一個例子:
- $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 = 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'],調用外部變量的一個別名而已!