Не получается переопределить метод в классе наследнике
Коллеги, добрый день, что я делаю не так, подскажите пожалуйста, я же указываю parent::setName($name)
class Shop
{
private $name;
public function setName($name)
{
$this -> name = $name;
}
public function getName()
{
echo $this -> name;
}
}
class Shop2 extends Shop
{
private $name2;
public function setName($name, $name2)
{
parent::setName($name);
$this -> name2 = $name2;
}
}
Fatal error: Declaration of Shop2::setName($name, $name2) must be compatible with Shop::setName($name) in C:\OSPanel\domains\localhost\test.php on line 27
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Дочерний класс не может переопределять сигнатуру родителя. Нарушается принцип Барбары Лисков. Дополнительные параметры могут быть только необязательными. Ну например так:
class Shop2 extends Shop
{
private $name2;
public function setName($name, $name2=null)
{
Исключение, как раз связанное с вызовом метода родителя, это конструктор