ฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเหตุใดในสถานการณ์ด้านล่างจึงมีความแตกต่างในวิธีการสืบทอดค่าคงที่ของคลาสเทียบกับตัวแปรอินสแตนซ์
<?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
ฉันอ่านเอกสารแล้ว แต่ดูเหมือนจะไม่เห็นการกล่าวถึงความแตกต่างเล็กน้อยนี้ ใครช่วยส่องไฟให้ฉันได้บ้าง