PHP中全局變量的使用global和$GLOBALS[]

用PHP開發項目,不可避免的會使用到全局變量,比如一些網站的配置信息,全站通用,那就可以在一個地方設置,然後多個地方調用。

把變量定義爲全局變量可以有兩種方法:global和$GLOBALS[]。很多人都認爲global和$GLOBALS[]只是寫法不同而已,其實是有差別的。

 

先來看看global
php對global變量的解析是:global的作用是定義全局變量,但是這個全局變量不是應用於整個網站,而是應用於當前頁面,包括include或require的所有文件。

看一下下面一段PHP代碼:

  1. $a=123;  
  2. function test1(){  
  3.     global $a;  //如果不把$a定義爲global變量,函數體內是不能訪問$a的  
  4.     echo $a;  //123  
  5. }  
  6. test1();  
  7.   
  8. global $b;  
  9. $b = 456;  
  10. function test2(){  
  11.     var_dump($b);  //NULL  
  12. }  
  13. test2();  
  14.   
  15. function test3(){  
  16.     global $c;  
  17.     $c=789;  
  18. }  
  19. test3();  
  20. echo $c;  //789  

  1. $a=123;  
  2. function test1()  
  3. {  
  4. global $a;   //如果不把$a定義爲global變量,函數體內是不能訪問$a的  
  5. echo $a//123  
  6. }  
  7. test1();  
  8.   
  9. global $b;  
  10. $b=456;  
  11. function test2()  
  12. {  
  13. var_dump($b);    //NULL  
  14. }  
  15. test2();  
  16.   
  17. function test3()  
  18. {  
  19. global $c;  
  20. $c=789;  
  21. }  
  22. test3();  
  23. echo $c;   //789  
通過代碼得出總結:在函數體內定義的global變量,函數體外可以使用,在函數體外定義的global變量不能在函數體內使用。

 

再來看看$GLOBALS[]

  1. $var1=1;  
  2. $var2=2;  
  3. function test1(){  
  4.     $GLOBALS['var2']=&$GLOBALS['var1'];  
  5. }  
  6. test1();  
  7. echo $var2;  //1  
  8.   
  9. $var3=1;  
  10. $var4=2;  
  11. function test2(){  
  12.     global $var3,$var4;  
  13.     $var4=&$var3;  
  14. }  
  15. test2();  
  16. echo $var4;  //2  

  1. $var1 = 1;    
  2. $var2 = 2;    
  3. function test1(){    
  4.      $GLOBALS['var2'] = &$GLOBALS['var1'];    
  5. }    
  6. test1();    
  7. echo $var2;  //1  
  8.   
  9. $var3 = 1;    
  10. $var4 = 2;    
  11. function test2(){    
  12.      global $var3,$var4;    
  13.      $var4 = &$var3;    
  14. }    
  15. test2();    
  16. echo $var4;   //2  
爲什麼$var2的打印結果是1,而$var4的打印結果爲2呢?其實就是因爲$var4的引用指向了$var3的引用地址。$var4的實際值並沒有改變。官方的解釋是:$GLOBALS['var']是外部的全局變量本身,global $var是外部$var的同名引用或者指針。

 

也許這個例子還不是很清晰,我再引入一個例子:

  1. $var1 = 1;      
  2. function test1(){      
  3.      unset($GLOBALS['var1']);      
  4. }      
  5. test1();      
  6. var_dump($var1);   //NULL    
  7.   
  8. $var2 = 1;      
  9. function test2(){      
  10.     global  $var2;      
  11.      unset($var2);      
  12. }      
  13. test2();      
  14. echo $var2;   //1   
  1. $var1 = 1;    
  2. function test1(){    
  3.      unset($GLOBALS['var1']);    
  4. }    
  5. test1();    
  6. var_dump($var1);   //NULL  
  7.   
  8. $var2 = 1;    
  9. function test2(){    
  10.     global  $var2;    
  11.      unset($var2);    
  12. }    
  13. test2();    
  14. echo $var2;   //1  

$var1的值被刪除,而$var2的值還存在。這就證明,$var2只是別名引用,本身的值沒有受到任何的改變。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章