Всем привет.
Погружаюсь в ООП и возник вопрос по созданию дочернего класса.
Есть родительский класс
class Animal {
public function __construct(
public string $name,
public int $health,
public int $power,
public bool $alive = true
) {
}
public function calcDamage() {
return $this->power * (mt_rand(100, 300) / 200);
}
public function applyDamage(int $damage) {
$this->health -= $damage;
if($this->health <= 0) {
$this->health = 0;
$this->alive = false;
}
}
}
Я от него наследуюсь и создаю следующий класс
class Mouse extends Animal {
private float $hiddenLevel;
public function __construct(
public string $name,
public int $health,
public int $power
) {
parent::__construct(name: $name, health: $health, power: $power);
$this->hiddenLevel = 0.4;
}
}
И вот тут у меня вопрос на счет конструкторов родителя и дочернего класса. Принцип Барбары Лисков гласит, что родитель может быть замещен ребенком без потери работоспособности кода (надеюсь я правильно понял этот принцип). И как я понимаю, конструктор ребенка должен совпадать с конструктором родителя.
Используя новшества PHP8 решил в конструкторе сразу же сделать присвоение параметров и последний параметр у меня необязательный. И тут у меня вопрос, надо ли согласно принципу Лисков передавать этот необязательный параметр дочернему классу ?
Хотел бы увидеть развернутые ответы от профи, чтобы получше разобраться в этом вопросе и огромная просьба, без флуда и каких-то споров в комментах.
Заранее благодарю.
P.S. Абстрактные классы и интерфейсы сейчас не рассматриваю, т.к. пытаюсь лучше разобраться в таких маленьких нюансах.