变量不仅有其特定的作用范围,还有其存活的周期--生命周期。变量的生命周期指的是变量可被使用的一个时间段,在这个时间段内变量是有效的,一旦超出这个时间段变量就会失效,我们就不能够再访问到该变量的值了。

PHP对变量的生命周期有如下规定。

局部变量的生命周期为其所在函数被调用的整个过程。当局部变量所在的函数结束时,局部变量的生命周期也随之结束。

全局变量的生命周期为其所在的".php"脚本文件被调用的整个过程。当全局变量所在的脚本文件结束调用时,则全局变量的生命周期结束。

有的时候某个自定义函数结束后,我们希望该函数内的变量仍然存在,这时就需要将这个变量声明为静态变量。将一个变量声明为静态变量的方法为,在变量前面加"static"关键字。

应用静态变量的示例代码如下。

<html> 
<head> 
<title>静态变量的应用</title> 
</head> 
<body> 
<?php 
     function test(){ 
          static $a = 0;      //定义一个静态变量a并赋初始值为0 
          echo $a."<br>";     //输出变量a的值 
          $a = $a+1; 
 //将变量a的值加1再次赋给变量a 
     } 
      test();             //调用函数test() 
      test(); 
      test(); 
      echo $a;                //$a,不在作用域下,不输出
  ?> 
</body> 
</html>

从上面得到的结果可以看出,每次调用函数test()的时候,变量a的值都会增加1。也就是说,每次调用函数结束以后,变量a都仍然存在。再次调用函数test()时,变量a将会使用上一次调用该函数后得到的值。同时从上面的例子我们也可以得出这样的结论,静态局部变量的作用范围与局部变量相同,但是生命周期与全局变量相同。

我们可以这样理解静态变量。

只有函数首次被调用时,才取函数体内静态变量的初始值。以后再次调用该函数时,静态变量将取上次调用这个函数后得到的值。

在为静态变量赋初值的时候,不可以将一个表达式赋给该静态变量。

 

静态局部变量的特点:

1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

 

关于静态全局变量:

//全局变量本身就是静态存储方式,所有的全局变量都是静态变量