Vorrei capire meglio perché, nello scenario seguente, c'è una differenza nel modo in cui le costanti di classe vengono ereditate rispetto alle variabili di istanza.
<?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();
Produzione:
TWO
TWO
ONE
TWO
Nel codice precedente, ChildClass non ha un metodo showTest (), quindi il metodo ParentClass showTest () viene utilizzato per ereditarietà. I risultati mostrano che poiché il metodo è in esecuzione su ParentClass, viene valutata la versione ParentClass della costante TEST, mentre poiché sta valutando all'interno del contesto ChildClass tramite ereditarietà, viene valutata la variabile membro ChildClass $ test.
Ho letto la documentazione, ma non riesco a vedere alcuna menzione di questa sfumatura. Qualcuno può farmi luce?
final
...