Вопрос №68169 от пользователя Demetri Samartsev в уроке «Интерфейсы (ключевое слово `interface`)», курс «PHP: Введение в ООП»

Demetri Samartsev

Спасибо за урок. Здорово ложится на курс по Абстрактным типам данных. Начинает складываться понимание, как изучать код фреймворков и cms, видимо стоит начинать такое изучение как раз с интерфейсов, которые и будут в первую очередь описывать какие в проекте есть сущности и какие операции над ними можно выполнять.

Посмотрел решение учителя. А можно философский вопрос? Разве мы не должны убедиться, что объект, с которым мы сравниваем объект типа ComparableInterface, сам имеет тип ComparableInterface?

А с практической точки зрения, если мы сравниваем по id, то ComparableInterface разве не должен иметь еще и обязательный и getId()?

https://ru.hexlet.io/code_reviews/603307

2 0

Roman Ashikov

Вам спасибо за отзыв! Рад, что урок понравился. =)

А можно философский вопрос? Разве мы не должны убедиться, что объект, с которым мы сравниваем объект типа ComparableInterface, сам имеет тип ComparableInterface?

Вопрос действительно философский и очень похож на вопрос из серии: "Должна ли функция обрабатывать все варианты невалидных аргументов?" Ответственность за то, чтобы на вход методу пришёл объект нужного типа несёт, эксплуатирующий данный класс, код.

А с практической точки зрения, если мы сравниваем по id, то ComparableInterface разве не должен иметь еще и обязательный и getId()?

Смотрите какая штука. Это ведь интерфейс и он содержит интерфейсные методы (тут даже само слово подсказывает), то есть методы, которые будут использоваться снаружи. Разве в нашем случае getId() используется таким образом? Это один момент. Второй момент, это интерфейс сравнения двух объектов, а не интерфейс, например, UserInterface. PHP поддерживает множественное наследование интерфейсов, и getId(), так же как и getName() я бы отнёс именно к интерфейсным методам самого User и имплементировал в UserInterface.

0

Demetri Samartsev

Спасибо, исчерпывающе!

Возникла мысль, что в принципе, при сравнении хорошо бы еще проверять, что мы сравниваем одинаковые сущности. Потому, что если единственный критерий - это id получаемый через getId(), то скорее всего такой метод есть и у пользователей и у товаров, а id у них вряд ли сквозные. Но на это, видимо, ответ такой же, в данном случае ответственность за то, чтобы "сравнивать сравнимое" лежит на клиентском коде.

0

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
с нуля
Разработка фронтенд-компонентов для веб-приложений
8 декабря 10 месяцев
Иконка программы Онлайн-буткемп. Фронтенд-разработчик
Профессия
Новый с нуля
Интенсивное обучение профессии в режиме полного дня
15 декабря 4 месяца
Иконка программы Python-разработчик
Профессия
с нуля
Разработка веб-приложений на Django
8 декабря 10 месяцев
Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
8 декабря 10 месяцев
Иконка программы PHP-разработчик
Профессия
с нуля
Разработка веб-приложений на Laravel
8 декабря 10 месяцев
Иконка программы Инженер по тестированию
Профессия
с нуля
Ручное тестирование веб-приложений
22 декабря 4 месяца
Иконка программы Node.js-разработчик
Профессия
с нуля
Разработка бэкенд-компонентов для веб-приложений
8 декабря 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
с нуля
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
8 декабря 16 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
c опытом
Создание веб-приложений со скоростью света
8 декабря 5 месяцев
Иконка программы Верстальщик
Профессия
с нуля
Верстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Аналитик данных
Профессия
В разработке с нуля
Сбор, анализ и интерпретация данных
дата определяется 8 месяцев