Comments 17
Для полной картины не хватает только ORMBehaviors\ActiveRecord :)
Впрочем, никто не спорит, что трейты это вкусняшка.
Впрочем, никто не спорит, что трейты это вкусняшка.
+1
Главное — четко понимать, что трейты это миксины, а не полноценное множественное наследование.
+3
Трейты это не миксины. Это легализированный копипаст =)
Что жаль, что трейты не связанные с интерфейсом. Т.е. нельзя проверить, например, включен ли в класс тот или иной трейт по интерфейсу. А это было бы очень даже неплохо.
Что жаль, что трейты не связанные с интерфейсом. Т.е. нельзя проверить, например, включен ли в класс тот или иной трейт по интерфейсу. А это было бы очень даже неплохо.
+4
Вообще-то, проверить можно, есть функция get_declared_traits
0
Если так, то скорее class_uses
Но. По интерфейсу несомненно удобнее. По сути, интерфейсы и трейты решают одну и ту же проблему, странно, что им не дано работать вместе.
Кроме того, существенное ограничение: This function returns an array with the names of the traits that the given class uses. This does however not include any traits used by a parent class.
Но. По интерфейсу несомненно удобнее. По сути, интерфейсы и трейты решают одну и ту же проблему, странно, что им не дано работать вместе.
Кроме того, существенное ограничение: This function returns an array with the names of the traits that the given class uses. This does however not include any traits used by a parent class.
0
>> По сути, интерфейсы и трейты решают одну и ту же проблему…
По сути, совсем разные. Интерфейс описывает возможности класса, а трейт — их реализацию. Используя реализацию трейта в классе, вы можете переименовывать его методы или использовать только некоторые из них, таким образом, использование трейта классом никоим образом не гарантирует то, что класс будет реализовывать какой-то интерфейс.
По сути, совсем разные. Интерфейс описывает возможности класса, а трейт — их реализацию. Используя реализацию трейта в классе, вы можете переименовывать его методы или использовать только некоторые из них, таким образом, использование трейта классом никоим образом не гарантирует то, что класс будет реализовывать какой-то интерфейс.
0
имеется ввиду что-то типа.
Пусть использование интерфейса будет опционально. Но было бы неплохо, если бы он был.
Просто хотелось бы адекватно реагировать в зависимости от того какой модуль подгружен.
trait Timestampable implements Timestampable {
function setCreatedAt();
function setUpdatedAt();
}
Пусть использование интерфейса будет опционально. Но было бы неплохо, если бы он был.
Просто хотелось бы адекватно реагировать в зависимости от того какой модуль подгружен.
0
Да, я смотрел. Но это не объясняет почему нет возможности привязывать интерфейс к трейтам. А прописывать для каждого трейта его же интерфейс, это немного напряжно: нужно знать какой интерфейс он реализует, и потом знать как это в коде проверить.
Короче, пока что это всё не принципиально. Просто трейты + интерфейсы были бы отличной независимой связкой кода с огромными возможностями.
Короче, пока что это всё не принципиально. Просто трейты + интерфейсы были бы отличной независимой связкой кода с огромными возможностями.
0
зашел сюда увидеть этот комментарий.
-3
UFO just landed and posted this here
Для этого достаточно описать интерфейс отдельно от трейта и реализовывать его в классах, которые используют трейт.
0
Sign up to leave a comment.
Doctrine ORM behaviors, или как эффективно использовать трейты