Me gustaría comprender mejor por qué, en el escenario siguiente, hay una diferencia en la forma en que se heredan las constantes de clase frente a las variables de instancia.
<?php
class ParentClass {
const TEST = "ONE";
protected $test = "ONE";
public function showTest(){
echo self::TEST;
echo $this->test;
}
}
class ChildClass extends ParentClass {
const TEST = "TWO";
protected $test = "TWO";
public function myTest(){
echo self::TEST;
echo $this->test;
}
}
$child = new ChildClass();
$child->myTest();
$child->showTest();
Salida:
TWO
TWO
ONE
TWO
En el código anterior, ChildClass no tiene un método showTest (), por lo que el método showTest () de ParentClass se usa por herencia. Los resultados muestran que dado que el método se está ejecutando en ParentClass, se está evaluando la versión ParentClass de la constante TEST, mientras que debido a que se está evaluando dentro del contexto ChildClass a través de la herencia, se está evaluando la variable de miembro ChildClass $ test.
He leído la documentación, pero parece que no veo ninguna mención de este matiz. ¿Alguien puede arrojarme algo de luz?
final
...