Tôi muốn hiểu rõ hơn tại sao, trong trường hợp bên dưới, có sự khác biệt trong cách các hằng số lớp được kế thừa so với các biến cá thể.
<?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();
Đầu ra:
TWO
TWO
ONE
TWO
Trong đoạn mã trên, ChildClass không có phương thức showTest (), vì vậy phương thức showTest () của ParentClass được sử dụng theo phương thức kế thừa. Kết quả cho thấy rằng vì phương thức đang thực thi trên ParentClass, phiên bản ParentClass của hằng số TEST đang được đánh giá, trong khi vì nó đang đánh giá trong ngữ cảnh ChildClass thông qua kế thừa, biến thành viên ChildClass $ test đang được đánh giá.
Tôi đã đọc tài liệu, nhưng dường như không thấy bất kỳ đề cập nào về sắc thái này. Bất cứ ai có thể làm sáng tỏ cho tôi?
final
...