以下のシナリオで、クラス定数がインスタンス変数と継承される方法に違いがある理由をよりよく理解したいと思います。
<?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();
出力:
TWO
TWO
ONE
TWO
上記のコードでは、ChildClassにはshowTest()メソッドがないため、継承によってParentClass showTest()メソッドが使用されます。結果は、メソッドがParentClassで実行されているため、TEST定数のParentClassバージョンが評価されているのに対し、継承によってChildClassコンテキスト内で評価しているため、ChildClassメンバー変数$ testが評価されていることを示しています。
私はドキュメントを読みましたが、このニュアンスについての言及は見られないようです。誰か私に光を当てることはできますか?
final
ます...