首页 > 语言 > PHP > 正文

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

2024-09-04 11:43:41
字体:
来源:转载
供稿:网友

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

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

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

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

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

PHP实例代码如下:

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

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

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

在全局范围内访问变量的第二个办法,是用特殊的 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 

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

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表