ฉันไม่เข้าใจว่าทำไมรหัสต่อไปนี้จึงใช้งานได้ STEALTH
ไม่ได้ถูกกำหนดใหม่ในคลาสย่อย... แม้ว่าจะถูกประกาศเป็น const
ในพาเรนต์ใช่หรือไม่ โปรดทราบว่าฉันรู้สึกว่า const
ป้องกันไม่ให้มีการกำหนดตัวแปรใหม่!
class Person {
const STEALTH = "MINIMUM";
}
class Ninja extends Person {
const STEALTH = "MAXIMUM";
}
echo Ninja::STEALTH; // prints out 'MAXIMUM'
โปรดทราบว่าฉันไม่ได้ถามเกี่ยวกับตัวดำเนินการแก้ไขขอบเขต ฉันคิดว่าฉันเข้าใจความแตกต่างระหว่างการพิมพ์ Ninja::STEALTH
กับ Person::STEALTH
ฉันแค่แปลกใจที่นินจาสามารถสืบทอดตัวแปร const ได้แต่ยังมีความสามารถในการกำหนดมันใหม่ได้!
Person::STEALTH
และNinja::STEALTH
เป็นสองสิ่งที่แตกต่างกันอย่างชัดเจน... - person deceze♦   schedule 11.07.2017STEALTH
ได้ - person Grateful   schedule 11.07.2017echo Ninja::STEALTH
ฉันจะสามารถพิมพ์ค่าของผู้ปกครองMINIMUM
ได้หรือไม่ ดูเหมือนว่าค่าจะถูกสืบทอดมา.. และหากเป็นเช่นนั้น ทำไมฉันจึงสามารถกำหนดค่าคงที่ NEW ด้วยชื่อเดียวกันของค่าคงที่ที่มีอยู่แล้วผ่านการสืบทอดได้ โดยปกติ ฉันเข้าใจการแทนที่... แต่ในกรณีนี้ ฉันจะแทนที่ตัวแปรconst
ได้อย่างไร - person Grateful   schedule 12.07.2017values
คิดในitems
คุณมีitem
ประเภทconstant
ในคลาสPerson
เนื่องจากคลาสNinja
สืบทอดคลาสPerson
คลาสNinja
จึงรู้ทุกๆitem
(ซึ่งไม่ใช่ไพรเวต) ของคลาสพาเรนต์ ดังนั้น คลาสNinja
รู้เกี่ยวกับitem
ประเภทconstant
ตอนนี้ คุณกำหนดitem
ประเภทconstant
ใหม่ด้วยชื่อเดียวกันในคลาสNinja
ดังนั้นคุณมี สอง รายการ: หนึ่งรายการitem
จากคลาสหลัก และรายการที่สองitem
ในNinja
เอง - person u_mulder   schedule 12.07.2017