知优码

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

php基础

彻底搞懂PHP面向对象static,self,parent(二)

2020-05-03php基础
static代表类。有重写特性。self 代表类自己。无重写特性。parent 代表父类。无重写特性。

php中static、self、parent关键字
我们现在谈论的场景是类的场景。上一篇文章是对象的场景。
php面向对象中的核心关键字包含了static,self,parent,这三个关键字只能在类中使用。是构成面向对象的核心部分。理解它代表的含义在开发中很重要。
搞懂它的使用方法并不难,主要是合理的解释清楚它的应用场景。在第二篇文章中讲述static,self,parent的另外一个应用场景。下面分别进行阐述。

一、static

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

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

二、self

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

三、parent

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

四、总结

static代表类。有重写特性。
self 代表类自己。无重写特性。
parent 代表父类。无重写特性。

五、示例

下例中子类重写了父类的say方法。分别调用static,self,parent,查看输出结果。
<?php
class fulei{

    function test(){
        static::say();
        //static在父类中,代表父类,调用父类的say。有重写特性。
        //父类的say被子类重写了,所以调用子类say
    }

    function test2(){
        self::say();
        //self代表对象自己。调用自己的say。无重写特性。
    }

    static function test4(){
        static::say();
        ////static在父类中,代表父类,调用父类的say。有重写特性。
    }

    static function say(){//静态方法
        echo "fulei";
    }
}

class zilei extends fulei{

    static function say(){//重写父类say静态方法
        echo "zilei";
    }

    function test3(){
        parent::say();
        //parent代表父类。调用父类的say。无重写特性。
    }
}

$z = new zilei();
$z->test(); //zilei
$z->test2(); //fulei
$z->test3(); //fulei

//通过范围操作符调用
$z::test4();//zilei