Anulación de constantes de clase vs propiedades

Me gustaría entender mejor por qué, en el siguiente escenario, hay una diferencia en la forma en que las constantes de clase se heredan en comparación con 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 ParentClass showTest () se usa por herencia. Los resultados muestran que, dado que el método se está ejecutando en ParentClass, se está evaluando la versión de ParentClass de la constante TEST, mientras que debido a que se está evaluando dentro del contexto de ChildClass a través de la herencia, se está evaluando la variable miembro de ChildClass $ test.

He leído la documentación, pero parece que no veo ninguna mención de este matiz. ¿Alguien puede arrojar algo de luz para mí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta