Ответ 1
Существует три сценария (я могу думать), в которых вы бы вызвали метод в подклассе, где метод выходит из родительского класса:
-
Метод не перезаписывается подклассом, существует только в родительском.
Это то же самое, что и ваш пример, и, как правило, лучше использовать
$this -> get_species();
. Вы правы, что в этом случае два фактически одинаковы, но метод был унаследован подклассом, поэтому нет причин для дифференцироваться. Используя$this
, вы остаетесь согласованным между унаследованными методами и локально объявленными методами. -
Метод перезаписывается подклассом и имеет полностью уникальную логику от родителя.
В этом случае вы, очевидно, захотите использовать
$this -> get_species();
, потому что вы не хотите, чтобы родительская версия метода была выполнена. Опять же, последовательно используя$this
, вам не нужно беспокоиться о различии между этим случаем и первым. -
Метод расширяет родительский класс, добавляя к тому, что достигает родительский метод.
В этом случае вы все равно хотите использовать
`$this -> get_species();
при вызове метода из других методов подкласса. Одно место, которое вы вызовете родительским методом, будет из метода, который переписывает родительский метод. Пример:abstract class Animal { function get_species() { echo "I am an animal."; } } class Dog extends Animal { function __construct(){ $this->get_species(); } function get_species(){ parent::get_species(); echo "More specifically, I am a dog."; } }
Единственный сценарий, который я могу себе представить, когда вам нужно будет вызвать родительский метод непосредственно за пределами метода переопределения, будет, если они сделали две разные вещи, и вы знали, что вам нужна родительская версия метода, а не локальная. Это не должно быть так, но если бы это было само собой, то простой способ приблизиться к этому - создать новый метод с таким именем, как get_parentSpecies()
, где все, что он делает, это вызвать родительский метод:
function get_parentSpecies(){
parent::get_species();
}
Опять же, это сохраняет все приятное и последовательное, что позволяет изменять/изменять локальный метод, а не полагаться на родительский метод.