Saya tidak mengerti mengapa kode berikut berfungsi. Bukankah STEALTH
sedang didefinisikan ulang di subkelas... meskipun dideklarasikan sebagai const
di induknya? FYI, saya mendapat kesan bahwa const
mencegah variabel didefinisikan ulang!
class Person {
const STEALTH = "MINIMUM";
}
class Ninja extends Person {
const STEALTH = "MAXIMUM";
}
echo Ninja::STEALTH; // prints out 'MAXIMUM'
Harap dicatat bahwa saya tidak bertanya tentang operator resolusi cakupan. Saya rasa saya memahami perbedaan antara mencetak Ninja::STEALTH
vs Person::STEALTH
. Saya hanya terkejut dengan kenyataan bahwa ninja dapat mewarisi variabel const namun memiliki kemampuan untuk mendefinisikannya kembali!
Person::STEALTH
danNinja::STEALTH
jelas merupakan dua hal yang berbeda… - person deceze♦   schedule 11.07.2017STEALTH
. - person Grateful   schedule 11.07.2017echo Ninja::STEALTH
, saya akan dapat mencetak nilai indukMINIMUM
? Sepertinya nilainya sedang diwarisi.. dan jika demikian, mengapa saya dapat mendefinisikan konstanta BARU dengan nama SAMA dari sebuah konstanta yang sudah ada melalui pewarisan? Biasanya, saya memahami penggantian... tetapi dalam kasus ini, bagaimana saya bisa mengganti variabelconst
? - person Grateful   schedule 12.07.2017values
, pikirkan diitems
. Anda memilikiitem
tipeconstant
di kelasPerson
. Karena kelasNinja
mewarisi kelasPerson
, kelasNinja
mengetahui setiapitem
(yang bukan privat) dari kelas induk. Jadi, kelasNinja
mengetahui tentangitem
bertipeconstant
. Sekarang, Anda mendefinisikanitem
baru bertipeconstant
dengan nama yang sama di kelasNinja
. Jadi, Anda memiliki dua item: satuitem
dari kelas induk dan yang keduaitem
diNinja
itu sendiri. - person u_mulder   schedule 12.07.2017