Выбор ответа Middle ООП, трейты и интерфейсы обновлено
Конфликт методов трейтов
Вопрос
Класс использует трейты A и B, в обоих есть метод hello(). Как разрешить конфликт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: use A, B { A::hello insteadof B; B::hello as helloB; }. При совпадении имён PHP выдаёт фатальную ошибку, а не выбирает молча.
Варианты ответа
- PHP возьмёт метод из последнего подключённого трейта
- Конфликт разрешить нельзя, нужно переименовать метод в одном трейте
use A, B { A::hello insteadof B; B::hello as helloB; }правильный ответuse A, B { hello: A; }
Разбор
При совпадении имён PHP выдаёт фатальную ошибку, а не выбирает молча. Оператор insteadof указывает, чей метод использовать, а as позволяет оставить второй под другим именем (и сменить видимость: as protected). Порядок подключения не решает конфликт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ООП, трейты и интерфейсы»
- Абстрактный класс или интерфейс в PHP
- Поверхностное клонирование
- Продвижение свойств в конструкторе
- Класс с интерфейсом и наследованием
- final и видимость констант
- Диспетчер событий с приоритетами
- Склад с исключениями предметной области
- Фигуры через интерфейс и абстрактный класс