No início, fiquei confuso por que as duas chamadas de método no construtor funcionam, mas agora acho que entendi. As classes de extensão herdam os métodos do pai como se fossem declarados na própria classe, E os métodos existem no pai, portanto, ambos devem funcionar.
Agora estou me perguntando se existe uma maneira preferencial (ou seja, prática recomendada) de chamar o método (via parent
ou this
), e se essas são ou não maneiras realmente idênticas de executar o mesmo código, ou se há alguma advertência ao usar um o outro.
Desculpe, provavelmente estou pensando nisso.
abstract class Animal {
function get_species() {
echo "test";
}
}
class Dog extends Animal {
function __construct(){
$this->get_species();
parent::get_species();
}
}
$spike = new Dog;
$leg = new leg()
dentro dehuman
, como chamaria as funções humanas de dentro de uma instância de perna$leg
?A menos que eu não esteja entendendo bem a questão, quase sempre usaria $ this-> get_species porque a subclasse (neste caso, dog) poderia sobrescrever esse método, uma vez que o estende. Se a classe dog não redefinir o método, ambas as formas são funcionalmente equivalentes, mas se em algum ponto no futuro você decidir que deseja que o método get_species em dog deva imprimir "dog", você terá que voltar por todo o código e mude.
Quando você usa $ this, ele é na verdade parte do objeto que você criou e, portanto, também será o mais atualizado (se a propriedade em uso mudou de alguma forma durante a vida do objeto), ao passo que usar a classe pai está chamando o método da classe estática.
fonte