程序员人生 网站导航

PHP Global变量定义一些用法详解

栏目:php教程时间:2013-11-20 19:43:13

php对global变量的解析是:Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

例代码如下:

  1. <?php  
  2. $a = 1;  
  3. $b = 2;  
  4. function Sum()  
  5. {  
  6. global $a$b//在里面声明为全局变量  
  7. $b = $a + $b;  
  8. }  
  9. Sum();  
  10. echo $b;  
  11. ?> 
  12. 结果: 3  

如果没有全局变量global在方法内是不能获得$a,$b值的,所以在方法里面想用外面的变量就需要先声明这个变量为全局变量,这样就可以使用了.

总结:在函数体内定义的PHP Global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,$glpbal $a; $a=123; function f() { echo $a; //错误, }

再看看下面一例,代码如下:

  1. function f()  
  2. {  
  3. global $a;  
  4. $a=123;  
  5. }  
  6. f();  
  7. 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 文件,代码如下:

  1. <?php 
  2. function Test_Global() 
  3. {   
  4.     Test();   
  5. }   
  6. include 'B.php';   //将include 从局部Test_Global函数中移出 
  7. $a = 0 ; 
  8. Test_Global(); 
  9. echo $a
  10. ?> 

B.php 文件

  1. <?php 
  2. function Test() 
  3.     global $a
  4.     $a =1; 
  5. ?> 

2.优秀的访问器,A.php 文件,代码如下:

  1. <?php 
  2. include 'B.php';  
  3. $a =0; 
  4. Set_Global($a); 
  5. echo $a
  6. ?>  

B.php 文件

  1. <?php 
  2. function Set_Global(&$var
  3.     $var=1; 
  4. ?> 

再来看看$GLOBALS[],代码如下:

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

2.为什么$var2的打印结果是1,而$var4的打印结果为2呢?其实就是因为$var3的引用指向了$var4的引用地址。$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. $var2 = 1;   
  8. function test2(){   
  9.     global  $var2;   
  10.      unset($var2);   
  11. }   
  12. test2();  
  13. echo $var2;  

1 $var1的值被删除,而$var2的值还存在,这就证明,$var2只是别名引用,本身的值没有受到任何的改变,也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐