Я не понимаю, почему следующий код работает. Разве 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
. Я просто удивлен тем фактом, что ниндзя может наследовать константную переменную и при этом иметь возможность переопределить ее!
Person::STEALTH
иNinja::STEALTH
явно разные вещи… - person deceze♦   schedule 11.07.2017STEALTH
. - person Grateful   schedule 11.07.2017echo Ninja::STEALTH
, я смогу распечатать родительское значениеMINIMUM
? Кажется, что значение наследуется... и если это так, то почему я могу определить НОВУЮ константу с ТАКИМ ЖЕ именем константы, которая уже существует через наследование? Обычно я понимаю переопределение... но в этом случае, как я могу переопределить переменную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