Saya ingin lebih memahami mengapa, dalam skenario di bawah ini, ada perbedaan dalam cara konstanta kelas diwarisi vs. variabel instan.
<?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();
Keluaran:
TWO
TWO
ONE
TWO
Dalam kode di atas, ChildClass tidak memiliki metode showTest (), jadi metode ParentClass showTest () digunakan oleh pewarisan. Hasilnya menunjukkan bahwa karena metode ini dijalankan pada ParentClass, versi ParentClass dari konstanta TEST sedang dievaluasi, sedangkan karena metode tersebut mengevaluasi dalam konteks ChildClass melalui pewarisan, variabel anggota ChildClass $ test sedang dievaluasi.
Saya telah membaca dokumentasinya, tetapi tidak melihat ada penyebutan nuansa ini. Adakah yang bisa memberi penjelasan untuk saya?
final
...