网站地图    收藏   

主页 > php专栏 > php面向对象 >

PHP static静态局部变量和静态全局变量总结 - php面

来源:自学PHP网    时间:2014-11-30 12:29 作者: 阅读:次

[导读] 使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留,虽然使用全局变量可以实现相同的功能,但是它经常会造成意外,静态局部变量的特点:1 不会随着函数的调...

PHP static静态局部变量和静态全局变量总结

使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留,虽然使用全局变量可以实现相同的功能,但是它经常会造成意外,静态局部变量的特点:

1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它,倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值.

2.静态局部变量只会初始化一次

3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式,即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0.

4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

PHP实例代码如下:

  1. function test() 
  2. { 
  3.     static $var = 5;  //static $var = 1+1;就会报错 
  4.     $var++; 
  5.     echo $var . ' '; 
  6. } 
  7. test(); //2 
  8. test(); //3 
  9. test(); //4 
  10. echo $var; //报错:Notice: Undefined variable: var  

关于静态全局变量,全局变量本身就是静态存储方式,所有的全局变量都是静态变量,PHP代码如下:

  1. function static_global(){ 
  2.     global $glo; 
  3.     $glo++; 
  4.     echo $glo.'<br>'; 
  5. } 
  6.  
  7. static_global(); //1 
  8. static_global(); //2 
  9. static_global(); //3 
  10. echo $glo . '<br>'; //3 
  11. //$a 将会在包含文件 b.inc 中生效。 代码如下 复制代码  
  12.     <?php   
  13.     $a = 1;   
  14.     include "b.inc";   
  15.     ?> 
  16.     <?php   
  17.     //局部变量测试   
  18.     $s1= "out s1"; //全局变量    
  19.        
  20.     function say(){   
  21.         $s1 = "in s1"; //局部变量   
  22.         echo "say():$s1";   
  23.     }   
  24.     say(); //输出局部变量: in s1   
  25.     echo "<br/>";   
  26.     echo "function out:$s1"; ////输出全局变量:out s1   
  27.     //static变量测试   
  28.     function count1(){   
  29.         $num = 0;   
  30.         $num++;   
  31.         echo $num." ";   
  32.     }   
  33.     function count2(){ //www.phpfensi.com 
  34.         static $num = 0;   
  35.         $num++;   
  36.         echo $num." ";   
  37.     }   
  38.        
  39.     for($i=0; $i<10; $i++){   
  40.         count1(); //11 1 1 1 1 1 1 1 1 1    
  41.     }   
  42.     echo "<br/>";   
  43.     for($i=0; $i<10; $i++){   
  44.         count2(); //1 2 3 4 5 6 7 8 9 10    
  45.     }   
  46.     echo "<br/>";   
  47.     //全局变量在函数中运用,加global   
  48.        
  49.     $a="php";   
  50.     $b = "java";   
  51.        
  52.     function show(){   
  53.         echo $a; // 无输出   
  54.         global $b;   
  55.         echo $b; //定义global,输出java   
  56.     }   
  57.     show();   
  58.     ?>   
  59. //输出3 
  60. //代码如下 复制代码  
  61.     <?php   
  62.     $a = 1;   
  63.     $b = 2;   
  64.        
  65.     function Sum()   
  66.     {   
  67.         global $a, $b;   
  68.        
  69.         $b = $a + $b;   
  70.     }   
  71.        
  72.     Sum();   
  73.     echo $b; //3   
  74.     ?>   

在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组,代码如下:

  1. <?php   
  2.     $a = 1;   
  3.     $b = 2;   
  4.        
  5.     function Sum()   
  6.     {   
  7.         $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];   
  8.     }   
  9.        
  10.     Sum();   
  11.     echo $b;   
  12. ?> 

静态变量也提供了一种处理递归函数的方法,递归函数是一种调用自己的函数,代码如下 :

  1. function Test()   
  2.     {   
  3.         static $count = 0;   
  4.        
  5.         $count++;   
  6.         echo $count; //12345678910    
  7.         if ($count < 10) {   
  8.             Test ();   
  9.         }   
  10.         //$count--;   
  11.     }   
  12.     Test();  

总结:

局部变量——用在函数内,作用域就是所在函数 

全局变量——在函数外,作用域在整个php文件(包含了 include 和 require 引入的文件),但在函数中不能读到,除非重新申明为global 

静态变量——用在函数内,被调用完后,内存不释放,保留最后值,多用来统计累加.

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论