php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > PHP static静态局部变量和静态全局变量总结 - php面

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

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

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

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

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.'
    '
  5.  
  6. static_global(); //1 
  7. static_global(); //2 
  8. static_global(); //3 
  9. echo $glo . '
    '
    //3 
  10. //$a 将会在包含文件 b.inc 中生效。 代码如下 复制代码  
  11.     
  12.     $a = 1;   
  13.     include "b.inc";   
  14.     ?> 
  15.     
  16.     //局部变量测试   
  17.     $s1"out s1"//全局变量    
  18.        
  19.     function say(){   
  20.         $s1 = "in s1"//局部变量   
  21.         echo "say():$s1";   
  22.     }   
  23.     say(); //输出局部变量: in s1   
  24.     echo "
    "
    ;   
  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.phpfensi.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 "
    "
    ;   
  42.     for($i=0; $i<10; $i++){   
  43.         count2(); //1 2 3 4 5 6 7 8 9 10    
  44.     }   
  45.     echo "
    "
    ;   
  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.     
  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.     $a = 1;   
  2.     $b = 2;   
  3.        
  4.     function Sum()   
  5.     {   
  6.         $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];   
  7.     }   
  8.        
  9.     Sum();   
  10.     echo $b;   
  11. ?> 

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

  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...
PHP成员变量获取对比(类成员变量) 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看. 有如下4个代码示例,你认为他们创建对象,并获得成员变量的速度排序是怎样的? 1:将成员变量设置为public,通过赋值操...
PHP框架模板原理分析 - php面向对象
PHP框架模板原理分析 本文主要来聊聊框架理论,但不针对任何一款框架,不过任何一款框架都离不开这个理论,首先我们了解下框架的来龙去脉,任何技术的出现都是为了解决某个问题,之前的博客有讲过smarty,其存在就是为了html和php更好地分离开来,而所谓的“框架”是一种为了统一书写格式,访问方式而...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……