Расширения в виде трейтов

malina95

Дракула кода:)
Привет, хотел спросить и немножко узнать про трейты, о них говорят очень много плохого, типа "нахера они нам если есть уже галимые статические классы?", так вот я и хотел спросить, оправдывается ли использование трейтов? ДлЯ меня они более понятны чем статические классы например, тоесть не понятны, а легче и удобнее.

Возможно ли сделать расширения для самописного движка в виде трейтов? Это нормально вообще? Тоесть пишешь трейт, ложишь в папочку, а потом вписываешь его имя на автозагрузку в контроллер, или их нельзя инициализировать так?
 

AmdY

Пью пиво
Команда форума
malina95
из того что ты написал, видно что у тебя понятия нет ни о статических классах ни о трейтах, так что как ни напишешь будет плохо. Трейты не предназначены для загрузки рантайм, это всего лишь умный и удобный копипаст.
 

malina95

Дракула кода:)
о трейтах только что прочитал на хабре, там было много плохих комментов, именно поэтому и спросил, я знаю что такое статический класс, просто трейт это не класс, его не объявишь как класс, хотя статический этого не требует практически... Просто хотел узнать, оправдывается ли использование трейтов, например в модели, каждый раз повторяется один и тот же код, не красиво как то, вот и подумал на счёт трейтов)
 

hell0w0rd

Продвинутый новичок
Трейты - это метод расширения класса без наследования. То есть если нужно собрать в классе 3 других - надо друг за другом их унаследовать. Трейты решают эту проблему.
Поэтому трейт целесообразно использовать как свойство класса - синглтон, AR-сущность, lazy-load и тд
 
  • Like
Реакции: WMix

malina95

Дракула кода:)
Спасибо, я уже понял... Возможно данный вопрос касается новой темы, но все же, как в движках реализовуют систему плагинов?
 

hell0w0rd

Продвинутый новичок
Спасибо, я уже понял... Возможно данный вопрос касается новой темы, но все же, как в движках реализовуют систему плагинов?
конфиг + расширение, порядок его загрузки. По хорошему все нужно оборачивать в абстрактные классы и их искать) Для примера можно посмотреть как регистрируются бандлы в том же симфони
 

Активист

Активист
Команда форума
Трейты это ваще вещь, это возможность множественного наследования. Конструктор. Кодится реально быстрее! По сути каждый объект это набор тех или иных свойств и методов. Для любителей ORM - это ваще сказка!
 

fixxxer

К.О.
Партнер клуба
С трейтами надо быть осторожным. Одно дело, SingletonTrait. Другое, когда трейты используются вместо нормальной иерархии классов: их наличие временами мешает остановиться, подумать и увидеть не сразу очевидную, но правильную иерархию. В общем, штука хорошая, если использовать с умом, а не пихать везде подряд.
 

Вурдалак

Продвинутый новичок
Угу, упоминания о множественном наследовании тут ни к чему. Это антипаттерн. Трейты несут иной смысл.
 

fixxxer

К.О.
Партнер клуба
Да, скорее в С++ множественное наследование используют "вместо трейтов". Просто потому что там нет трейтов. Так же как и абстрактные классы, состоящие только из абстрактных методов, вместо интерфейсов:)
 

Активист

Активист
Команда форума
Угу, упоминания о множественном наследовании тут ни к чему. Это антипаттерн. Трейты несут иной смысл.
Как?! Как метод расшерения класса (в виде трейта) может быть антипатерном?! Трейт это синтаксическая возможность, а паттернт - шаблон (возмжность != код). Статических методов вот что полное УГ, которая разрывает мозг напрочь.
 

Adelf

Administrator
Команда форума
Absinthe
да. трейты легко заменяются копипастом ;-)
 

hell0w0rd

Продвинутый новичок
Либо реализуются при помощи других языковых средств.
Например?
Угу, упоминания о множественном наследовании тут ни к чему. Это антипаттерн. Трейты несут иной смысл.
Конечно множественное наследование антипаттерн. Поэтому есть трейты, это же логично, нет?)

Синтаксическая возможность...
const, private, public, protected - это все также синтаксические возможности, которые позволяют программистам не ошибаться
 

Активист

Активист
Команда форума
Если вы кодите в стиле ORM - то это незаменимая вещь. Ваши холивары по поводу антипатернов и патернов (многие их которых вообще не применимы в скриптовом языке) мне не интересны.
 
Сверху