使用$ this或parent ::来调用继承的方法?

Aes*_*ere 16 php

不是真正的问题,更像是我的好奇心,但作为一个例子,说我有一个PHP类:

class baseTestMain
{
    protected function testFunction()
    {
        echo 'baseTestMain says hi';
    }
}
Run Code Online (Sandbox Code Playgroud)

以及从上面那个类扩展的另一个类:

class aSubClass extends baseTestMain
{
    public function doingSomething()
    {
        parent::testFunction();
        //someextrastuffhere
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,当我想在子类中定义一个新方法时调用父方法时,我会做上面的事情 - parent::methodnamehere()但是parent::你也可以使用$this->methodname()和操作相同.

class aSubClass extends baseTestMain
{
    public function doingSomething()
    {
        $this->testFunction();
        //someextrastuffhere
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我要问的是,我应该使用parent::testFunction();还是使用$this->testFunction();?或者我错过了它有什么不同吗?如果没有,您的偏好或首选方法是什么?

请注意,我没有覆盖或扩展子类中的该函数,实质上是从父级继承实现.

Bol*_*ock 31

在你的情况下,从aSubClass::testFunction()继承baseTestMain::testFunction(),使用$this->testFunction().您应该只parent::testFunction()在您的子实体中在其实现中覆盖该方法时使用.

不同之处在于,如果子项具有自己的实现而不是从父项继承,则parent::$this->调用子项的实现时调用父项的实现.


Ign*_*ams 6

在父级上调用方法可以防止类的子级正确地参与多态,因为永远不会调用方法的重新定义.