文章教程

14.2.6PHP中类的静态成员

9/17/2020 9:26:54 PM 人评论 次浏览

14.2.6 PHP中类的静态成员

静态成员包括静态方法和静态属性。类的静态成员与类的一般成员不同,静态成员与类的实例无关,只与类本身有关。这意味着,类的静态属性可以由该类所有的对象所共享,它类似于函数的全局变量,只是它只属于某个固定的类,并且有访问限制。类似地,静态方法也与特定的对象无关,它类似于全局函数。静态方法可以完全访问类的属性,也可以由对象的实例来访问。

在实际开发中,如果希望在不存在有效对象的时候调用一个方法,那么就可以使用静态方法。如代码14-5演示了如何在PHP的类中使用静态成员,该代码实现了一个简单的计数器。

代码14-5 PHP程序中类的静态成员14-5.php


01 <?php

02 class Counter

03 {

04 private static$count=0;//静态成员变量

05

06 function__construct()//构造函数

07 {

08 echo'<b>计数开始!</b><br/><br/>';

09 }

10 function__destruct()//析构函数

11 {

12 echo'<b>计数结束!</b><br/><br/>';

13 }

14 static function get_count()//静态成员函数

15 {

16 return self::$count;

17 }

18

19 static function counts()

20 {

21 self::$count++;//注意这里静态成员变量的使用方法,加self::

22 }

23 }

24

25 $c=new Counter();

26 $i=0;

27

28 while($i<5)

29 {

30 Counter:counts();//通过限定Count:直接调用静态函数counts(),并没有使用对象$c来调用

31 $i=Counter:get_count();

32 echo Counter:get_count()."<br/><br/>";

33 }

34 ?>


【代码解析】这段代码在Counter类中定义了一个静态属性$count,静态方法get_count()和counts()。在类的内部,使用这些成员时并没有使用$this变量,而是通过该类的命名空间,即使用self::,如代码第16行和第21行所示。在类的外部,当调用类的方法时,同样没有使用事先生成的实例对象$c,使用类似$c->get_count()的代码来调用类方法,而是通过Counter::来访问该类的静态方法,如代码第30、31行。因为这些方法都是静态方法,并不针对每个具体实例所有,而是所有的对象共享。这段代码的执行结果如图14-3所示。

图 14-3 在PHP程序中使用类的静态成员

教程类别