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

php
2022-08-30 20:49:42

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

class baseTestMain
{
    protected function testFunction()
    {
        echo 'baseTestMain says hi';
    }
}

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

class aSubClass extends baseTestMain
{
    public function doingSomething()
    {
        parent::testFunction();
        //someextrastuffhere
    }
}

通常,当我想在子类中定义新方法时调用父方法时,我会执行上述操作 - 但是您也可以使用,并且操作将是相同的。parent::methodnamehere()parent::$this->methodname()

class aSubClass extends baseTestMain
{
    public function doingSomething()
    {
        $this->testFunction();
        //someextrastuffhere
    }
}

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

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


答案 1

在您的情况下,由于 继承自 ,请使用 。仅当要在其实现中的子类中重写该方法时,才应使用。aSubClass::testFunction()baseTestMain::testFunction()$this->testFunction()parent::testFunction()

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


答案 2

在父级上调用方法会阻止类的子级正确参与多态性,因为永远不会调用它们对方法的重定义。


推荐