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

时间:2011-02-24 08:10:32

标签: php

不是真正的问题,更像是我的好奇心,但作为一个例子,说我有一个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}}?或者我错过了它有什么不同吗?如果没有,您的偏好或首选方法是什么?

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

2 个答案:

答案 0 :(得分:30)

在您的情况下,由于aSubClass::testFunction()是从baseTestMain::testFunction()继承的,因此请使用$this->testFunction()。如果您要在其实现中覆盖子类中的方法,则应该只使用parent::testFunction()

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

答案 1 :(得分:6)

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