php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的值,常用于递归或子函数中保留之前的值,可以用来定义变量和方法,下面简单的代码:
1 class Human{ 2 public $name; 3 protected $height; 4 5 public static $sValue="Static Value in Human"; 6 public function eat($food){ 7 echo $this->name . "'s eating ". $food. " "; 8 } 9 } 10 11 class Me extends Human 12 { 13 public $team="lsl"; 14 private $age="23"; 15 16 public static $president="zzy"; 17 18 public static function changePresident($newPrsdt){ 19 static::$president = $newPrsdt; 20 echo parent::$sValue . "<br />"; 21 } 22 23 //静态变量和方法操作 24 private static $a="abc"; 25 26 public static function abc(){ 27 echo "<br />".self::$a; 28 self::$a.="def"; 29 } 30 } 31 32 echo Me::$president. " "; 33 Me::changePresident("web"); 34 echo Me::$president. "<br />"; 35 36 37 38 Me::abc(); 39 Me::abc();
首先定义了一个人类Human,然后定义一个类Me继承了Human,则Human里面的成员都可以通过Me的对象来使用了,并且整个使用过程中成员变量的值都是有效的,根据代码可以看到:静态变量的值改变之后下次再调用就是改变之后的了,如果是普通变量则无法实现,只能是通过对象改变才有效,而通过类内部的方法是无法改变的,通过最后两行代码更容易看出,调用了2次方法abc后静态变量$a的值就发生改变了,静态变量自己想一下就可以理解了,用途也很广泛,下面总结几点静态关键字相关的规则:
1、一般静态属性用于保存类的公有数据
2、静态方法内部只能访问静态属性,包括本类和父类的
3、静态成员不需要实例化对象就可以访问
4、在本类内部访问静态属性用self或static关键字访问,后面带上的变量要包括$,比如: self::$a或者static::$a
5、访问父类静态属性使用parent,如:parent::$name
6、在类外部访问静态变量或者方法时使用类名直接访问,无需实例化。如:Me::$pan和Me::abc()