Доброй ночи.
Начну с конкретной задачи: есть две функции, которые, по сути, добавляют к сущности записи определенные категории, модифицируя их (им передается id записи, они модифицируют запись и сохраняют изменения в бд). Раньше это было приватными методами в одном классе, но вот сейчас потребовалось использовать эти функции в другом месте, и я не вижу лучшего способа это сделать, чем вынести их в трейт. Можно, конечно, вынести в класс, но как назвать класс, который ничего не делает, а только хранит две функции? Все остальные классы разделены по их задачам, здесь же задача туманна, поэтому трейт мне видится самым семантичным вариантом.
В то же время, класс, использующий трейт, менее прозрачен, поэтому вопрос: стоит ли вообще использовать трейты в качестве небольших библиотек самодостаточных функций? Можно ли сделать лучше без трейтов?
Спасибо за ответ, в целом я с вами согласен. Однако как-то читал контраргументы (возможные конфликты имен и невозможность понять, откуда именно метод, если трейтов в классе несколько), и они показались мне весомыми.
В общем случае - trait.
Но в зависимости от фреймворка могут быть и лучшие решения. Например, для Yii2 в вашем случае лучше использовать behaviors "before save".