Задать вопрос
@JeanPaulBelmondo

Должны ли свойства родителя обязательно использоваться во всех потомках?

В целом понятное дело что нет.
Но данный вопрос о том, есть какое-то негласное правило или, скажем так, правило хорошего тона, которое заставляет так делать?

Родитель

class BaseProduct
{
     protected SomeProperty $prop;
}


И его потомки

class Bread extends BaseProduct
{
    public function __invoke()
    {
        return $this->prop;
    }
}


class Milk extends BaseProduct
{
    public function __invoke()
    {
        return $this->prop;
    }
}


class Avocado extends BaseProduct
{
    // о боже! тут $this->prop не используется
}


  • Вопрос задан
  • 96 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Newto
@Newto
Правило, описанное ответом выше, относится именно к интерфейсам. Т.е. если вы используете интерфейс, то в классе - наследнике интерфейса не должно быть методов, что не описаны в интерфейсе. Но если говорить о случае, когда один класс(не интерфейс) наследует другой, то нет никаких ограничений и это совершенно нормально. К примеру, есть у вас класс "Свет" в котором есть свойства "Включить свет", "Выключить свет" и "Аварийное отключение". И есть три класса - наследника: "Спальня", "Кухня" и "Сигнализация". При этом включать и выключать свет в спальне и на кухне мы можем когда захотим, а вот выключить лампочку, показывающую что работает сигнализация, мы можем только при чрезвычайной ситуации. Таким образом будет совершенно нормально, что классы "Спальня" и "Кухня" будут использовать только методы "Включить свет" и "Выключить свет". А класс "Сигнализация" только "Аварийное отключение". И при этом все они будут наследниками класса "Свет".

В данном случае важны не принципы и правила, а удобство структурирования кода. В прочем, обычно, все правила с удобством совпадают.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Есть правило, напрямую запрещающее делать лишние свойства. Читайте про принципы SOLID.
Вы говорите о принципе разделения интерфейсов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы