Что такое traits? Чем они отличаются от наследования и интерфейсов?
Trait — это блок методов и свойств, который подмешивается в класс в обход одиночного наследования PHP. Интерфейс объявляет контракт без реализации; наследование даёт связь «является» с одним родителем; trait даёт переиспользуемую реализацию без типовой связи. Конфликты между трейтами нужно разрешать явно через insteadof или as.