Используя $this или parent:: для вызова унаследованных методов?

Не проблема, скорее как любопытство с моей стороны, а как пример, скажем, у меня есть класс 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

Вызов метода на родительском объекте запрещает детям классов участвовать в полиморфизме должным образом, так как их переопределение метода никогда не будет вызываться.