不是真正的问题,更像是我的好奇心,但作为一个例子,说我有一个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}}?或者我错过了它有什么不同吗?如果没有,您的偏好或首选方法是什么?
请注意,我没有在子类中重写或扩展该函数,实质上是从父级继承实现。
答案 0 :(得分:30)
在您的情况下,由于aSubClass::testFunction()
是从baseTestMain::testFunction()
继承的,因此请使用$this->testFunction()
。如果您要在其实现中覆盖子类中的方法,则应该只使用parent::testFunction()
。
不同之处在于parent::
调用父项的实现,而$this->
调用子项的实现,如果子项具有自己的实现,而不是从父继承它。
答案 1 :(得分:6)
在父级上调用方法可以防止类的子级正确地参与多态,因为永远不会调用它们重新定义方法。