一、静态变量

<?php

/**

声明一个名为test的函数,测试在函数内部声明的静态变量的使用

*/

function test(){

static $a=0;

echo $a;

$a++;

}

test();           //第一次运行,输出0

test();           //第二次运行,输出1

test();           //第三次运行,输出2

test();           //第四次运行,输出3

?>


  在上例中,将函数中的局部变量$a,使用static关键词声明为静态变量,并赋初值为0.函数在第一次执行时,静态变量$a经运算后,从初值0变为1.当函数第一次执行完毕后,静态变量$a并没有被释放,而是将结果保存在静态内存中。第二次执行时,$a从内存中获取上一次计算的结果1,继续计算,并将结果2存于静态内存空间中。以后每次函数执行时,静态变量将从自己的静态内存空间中获取前次的储存结果,并以此为初值进行计算。


二、static关键字的使用

    类中的静态成员是不需要对象而是使用类名来直接访问的,格式如下所示:

类名::静态成员属性名;      //在类的外部和成员方法中都可以使用这种方式访问静态成员属                              性

类名::静态成员方法();      //在类的外部和成员方法中都可以使用这种方式访问静态成员方                              法


    在类中声明的成员方法中,也可以使用关键字“self”来访问其他静态成员。因为静态成员是属于类的,而不属于任何对象,所以不能用$this来引用它,而在PHP中给我们提供的self关键字,就是在类的成员方法中用来代表本类的关键字。格式如下所示:

self::静态成员属性名;       //在类的成员方法中使用这种方式访问本类中的静态成员属性

self::静态成员方法名();      //在类的成员方法中使用这种方式访问本类中的静态成员方法

<?php

class MyClass{

static $count;         //在类中声明一个静态成员属性count,用于统计对象被创建的次数


function __construct(){     //每次创建一个对象就会自动调用一次这个构造方法

self::$count++;         //使用self访问静态成员count,使其自增1

}


static function getCount(){    //声明一个静态方法,在类外面直接使用类名就可以调用

return self::$count;       //在方法中使用self访问静态成员并返回

}

}

MyClass::$count=0;               //在类外面使用类名访问类中的静态成员,为其初始化赋值0


$myc1=new MyClass();             //通过myclass类创建第一个对象,在构造方法中将count累加1

$myc2=new MyClass();             //通过myclass类创建第二个对象,在构造方法中又将count累加1

$myc3=new MyClass();            //通过myclass类创建第三个对象,在构造方法中再次将count累加1


echo MyClass::getCount();       //在类外面使用类名访问类中的静态成员方法,获取静态属性的值3

echo "<br/>";

echo $myc3->getCount();        //通过对象也可以访问类中的静态成员方法,获取静态属性的值3

?>

代码运行结果为3 3