Gostaria de entender melhor por que, no cenário abaixo, há uma diferença na maneira como as constantes de classe são herdadas e as variáveis de instância.
<?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();
Resultado:
TWO
TWO
ONE
TWO
No código acima, ChildClass não tem um método showTest (), portanto, o método ParentClass showTest () é usado por herança. Os resultados mostram que, como o método está sendo executado na ParentClass, a versão ParentClass da constante TEST está sendo avaliada, enquanto, por estar avaliando dentro do contexto ChildClass por meio de herança, a variável de membro ChildClass $ test está sendo avaliada.
Eu li a documentação, mas não consigo ver qualquer menção a essa nuance. Alguém pode lançar alguma luz para mim?
final
...