Al principio estaba confundido por qué ambas llamadas al método en el constructor funcionan, pero ahora creo que lo entiendo. Las clases extensibles heredan los métodos del padre como si estuvieran declarados en la propia clase, Y los métodos existen en el padre, por lo que ambos deberían funcionar.
Ahora me pregunto si hay una forma preferida (es decir, la mejor práctica) de llamar al método (a través de parent
o this
), y si estas son formas realmente idénticas de ejecutar el mismo código, o si hay alguna advertencia al usar uno sobre el otro.
Lo siento, probablemente estoy pensando demasiado en esto.
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
, ¿cómo llamaría a las funciones humanas desde el interior de una instancia de pierna$leg
?A menos que no esté entendiendo la pregunta, casi siempre usaría $ this-> get_species porque la subclase (en este caso, perro) podría sobrescribir ese método, ya que lo extiende. Si la clase dog no redefine el método, ambas formas son funcionalmente equivalentes, pero si en algún momento en el futuro decides que quieres que el método get_species en dog imprima "dog", entonces tendrás que revisar todo el código cambialo.
Cuando usa $ this, en realidad es parte del objeto que creó y, por lo tanto, siempre será el más actualizado también (si la propiedad que se usa ha cambiado de alguna manera durante la vida útil del objeto) mientras se usa la clase principal está llamando al método de clase estática.
fuente