Не совсем проблема, больше похожа на любопытство с моей стороны, но в качестве примера, скажем, у меня есть класс 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();
? или есть ли разница в том, что я пропустил? Если нет, то каковы ваши предпочтения или предпочтительный метод?
Обратите внимание, что я не переопределяю или не расширяю эту функцию в подклассе, по сути, реализация переносится из родителя.
В вашем случае, поскольку aSubClass::testFunction()
наследуется от baseTestMain::testFunction()
, используйте $this->testFunction()
. Вы должны использовать parent::testFunction()
если вы собираетесь переопределить этот метод в своем подклассе в рамках его реализации.
Разница в том, что parent::
вызывает реализацию родителя, в то время как $this->
вызывает реализацию ребенка, если у ребенка есть своя реализация, а не наследуется от родителя .
Вызов метода на родительском объекте препятствует тому, чтобы дети класса участвовали в полиморфизме должным образом, поскольку их переопределение метода никогда не будет вызвано.