知优码

您现在的位置是:首页 > Php语言 > php基础

php基础

彻底搞懂PHP之new static,self,parent创建对象(三)

2020-05-06php基础
new static()创建当前类的一个对象。new self(),创建类自己的一个对象。new parent(),创建父类的一个对象。
PHP中static,self,parent创建对象

我们现在谈论的场景是类的场景。
php面向对象中的核心关键字包含了static,self,parent,这三个关键字只能在类中使用。是构成面向对象的核心部分。理解它代表的含义在开发中很重要。
我们可以在类中使用new static(),new self(),new parent()来创建对象。他们创建的对象有什么区别呢。
之前两篇文章讲了这些关键字的应用场景,在创建对象的时候,他们是属于类的应用场景。
例如有个人叫张三,在家排行老大,它的兄弟们都叫他老大。同时张三有自己的公司,在公司里它是总经理,同事们也称呼他为老大。
老大这个称呼就等价于类场景的static。在家里老大代表大哥,在公司里老大代表总经理。一个称呼两个场景。

一、static

new static()创建当前类的一个对象。

一般我们称static为指向当前类的指针。这个解释有点复杂了。因为在php开发中,我们并没有指针的这个概念。指针是出现在底层语言如c语言,c++语言里的。
所以static的解释应该重新定义一下,更加的方便理解。

什么是static呢?定义为:static代表当前类。
理解这句话的核心是当前类。当前类表示的是static在哪个类中使用,即static在哪个类里,这个类就是当前类。
简单点说就是static在哪里,static所在的类就是当前类。这就是所谓的上下文。
因为面向对象编程有继承的特性,如果static在子类中,当前类就是子类。static在父类中,当前类就是父类。
即static所在的位置决定了当前类是什么。
 

二、self

new self(),创建类自己的一个对象。

self可以望文生义,即表示类自己。忽略了继承的特性。
继承的特性是方法的重写。self忽略了继承的特性,就表示self忽略了方法的重写。

三、parent

new parent(),创建父类的一个对象。

同上。parent可以望文生义,即表示父类。忽略了继承的特性。
parent忽略了继承的特性,就表示parent也忽略了方法重写。
 

四、总结

new static()创建当前类的一个对象。
new self(),创建类自己的一个对象。
new parent(),创建父类的一个对象。

五、示例

下例中分别调用new static,self,parent创建对象,查看输出结果。
<?php
class fulei{

    static function getInstanceStatic(){ //静态方法

        return new static(); //class zilei#1 创建子类的对象
    }

    static function getInstanceSelf(){ //静态方法

        return new self(); //class fulei#2 创建类自己的对象
    }

}

class zilei extends fulei{

    static function getInstanceParent(){ //静态方法

        return new parent(); //class fulei#1 创建父类的对象
    }

}

$s = zilei::getInstanceStatic();
var_dump($s);

$s = zilei::getInstanceSelf();
var_dump($s);

$s = zilei::getInstanceParent();
var_dump($s);