Код (Text): class Person{ public $sex = 'girl'; public $age = 0; public $height = 150; public static $numberPassport = 1; public function getParentSex(){ echo $this->sex; } } class Boy extends Person{ public $hobby = ['girl', 'basketball', 'cars', 'alcohol']; public $hasHair = false; public $sex = 'man'; public function getParentSex(){ echo $this->sex; parent::getParentSex(); } } $boy = new Boy(); $boy->getParentSex(); При вызове выдает два раза manman Что необходимо сделать, чтобы вывело mangirl Почему через parent::getParentSex() вызывается дочерний метод подкласса?
В PHP, когда ты в подклассе переопределяешь поле со значением по умолчанию, вместо создания нового поля php перезаписывает то, что объявлено в супер-классе. Поэтому так не получится, как ты хочешь. А вот если ты поле заменишь на метод, то ты можешь вызывать родительский в перекрытом.
Вызывается вовсе не дочерний метод. Вызывается именно метод родителя Вот только выводится значение свойства, объявленного как public. А оно (public-свойство), как выше указали, переопределяется в дочернем классе. Можете, например, объявить это свойство как private. Тогда оно не будет переопределяться. Но это тоже не выход для предложенной схемы... ибо станно смотрится "мальчик", наследующий класс "девочки" (ведь именно таким образом определен "person").