php--面向对象--类的静态成员

来源:互联网 发布:矩阵中rank什么意思 编辑:程序博客网 时间:2024/05/18 03:23

静态成员

  定义:指的是逻辑上被所有的对象所共享,属于类的成员称之为类的静态成员!

 

 

                                               静态成员在类中的逻辑结构:

                      

   存在:表明该静态属性或该静态方法是对象所共有.

   声明:表明该属性或方法是对象所独有.


场景:若要完成一个学生计数器,当学生被实例化一次,$count就加1,当对象销毁时,$count就减1。

 

如果使用成员属性:


能否完成我们所需要的业务逻辑呢?


结果如下:


很显然没有成功,那么这是为什么呢?

 

由上图我们得知,如果我们要完成一个计数器,首先这个count不能是当前对象独有的数据,因为每次实例化得到的count是当前对象的count,与下次实例化得到的count 不同,count的内容归当前对象所独有,只有当count是对象所共有的数据是,结果才能改变。那么我们可以通过全局变量来实现。

  使用全局变量:

结果会正确吗?

结果完美!

 

定义了全局变量,如果想要在类中使用需要使用$GLOBALS[‘变量名’] 来进行访问。

 

但是思考一下,我们这样定义了全局变量 count,可是这个count除了可以表示学生数量是不是也可以表示别的业务逻辑?

全局变量不应该属于任何的对象或者。$count 与 Student没有丝毫的逻辑上的联系!

 

显然,应该找一个能够被对象所共有并且能够在多个方法内使用的变量,还应该与当前的对象类有逻辑的关系的数据。

可以使用类的静态成员

                           

存在:表明该静态属性或该静态方法是对象所共有.

声明:表明该属性或方法是对象所独有.

回到上面的静态成员逻辑结构图

 静态属性存在是什么意思?

就是指这个数据本身存在类里面,而不是实例化对象后存在当前对象内。

比如我们var_dump一个含有静态属性的对象,看看它内部有什么

结果如下:

我们看到了,除了一个成员属性names,并没有显示count,说明了静态属性并不是在实例化后才有,而是在类里面已经存储过了。

静态成员语法

声明

额外增加一个 static 关键字!

属性:


访问

->访问对象成员

 

因此,应该使用类访问,

类 :: 成员!

::,静态访问符,类访问符(范围解析操作符)

在构造方法中,访问到,++!

类似于$this,同样存在一个self关键字(注意没有$),在类中,代表当前类!

$this:这个对象, $this->

self:类自己,self::

使用静态成员:

实例化

结果如下:

完美!

注意

1,  访问上,静态成员只能使用::静态访问符号访问!

典型的,::前应该是类,类内可以使用self。

但是,php支持: 对象::静态成员!




0 0