Не получается переопределить метод в классе наследнике

Рейтинг: 0Ответов: 1Опубликовано: 01.02.2023

Коллеги, добрый день, что я делаю не так, подскажите пожалуйста, я же указываю 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

Ответы

▲ 0

Дочерний класс не может переопределять сигнатуру родителя. Нарушается принцип Барбары Лисков. Дополнительные параметры могут быть только необязательными. Ну например так:

class Shop2 extends Shop
{
    private $name2;

    public function setName($name, $name2=null)
    {

Исключение, как раз связанное с вызовом метода родителя, это конструктор