Выбор ответа Middle ООП, трейты и интерфейсы обновлено

Конфликт методов трейтов

Вопрос

Класс использует трейты A и B, в обоих есть метод hello(). Как разрешить конфликт?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: use A, B { A::hello insteadof B; B::hello as helloB; }. При совпадении имён PHP выдаёт фатальную ошибку, а не выбирает молча.

Варианты ответа

  1. PHP возьмёт метод из последнего подключённого трейта
  2. Конфликт разрешить нельзя, нужно переименовать метод в одном трейте
  3. use A, B { A::hello insteadof B; B::hello as helloB; }правильный ответ
  4. use A, B { hello: A; }

Разбор

При совпадении имён PHP выдаёт фатальную ошибку, а не выбирает молча. Оператор insteadof указывает, чей метод использовать, а as позволяет оставить второй под другим именем (и сменить видимость: as protected). Порядок подключения не решает конфликт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.