知优码

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

php基础

彻底搞懂PHP面向对象this,self,parent(一)

2020-05-03php基础
php面向对象中的核心关键字包含了this,self,parent,这三个关键字只能在类中使用。是构成面向对象的核心部分。理解它代表的含义在开发中很重要。搞懂它的使用方法并不难,主要是合理的解释清楚它的应用场景。

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

一、this

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

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

二、self

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

三、parent

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

四、总结

this 代表当前对象。有重写特性。
self 代表对象自己。无重写特性。
parent 代表父对象。无重写特性。

五、示例

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

    function test(){
        $this->say();
        //this在父类中,代表父对象,调用父对象的say。有重写特性。
        //父对象的say被子类重写了,所以调用子对象say
    }

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

    function say(){
        echo "fulei";
    }
}

class zilei extends fulei{

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

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

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



我们现在谈论的场景是对象场景。下一篇文章谈论类的场景。