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

    xiaoxiao2021-04-15  53

    静态成员

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

     

     

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

                          

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

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

    场景:若要完成一个学生计数器,当学生被实例化一次,$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支持: 对象::静态成员!

    转载请注明原文地址: https://ju.6miu.com/read-670964.html

    最新回复(0)