Как стать автором
Обновить

Комментарии 25

Никита Попов: Трейты не люблю особо. Я участвую в разработке с PHP 5.5, а их добавили в 5.4. Если бы я тогда был, их бы точно не добавили.

Аргументы есть какие-нибудь, или это чисто субъективное мнение?
Это вырвано из интервью, у Никиты не было времени дать полный ответ, да его и не просили. Но я осмелюсь предположить, что имелось введу, что он бы активно участвовал в RFC и предложил бы более лучшее решение, но на тот момент, такой возможности у него не было.
Понял, спасибо.
Привет! Да, как верно заметили, времени в итервью этому было уделено немного, вот тут можно посмотреть ответы Никиты и Стогова в оригинале.
Благодарю!
Вы пригласили 4х человек с одинаковым взглядом на проблему и решили подискутировать? А собственно говоря о чём? О том как их «правильно» готовить?
Зовите тогда Попова чтобы хоть кто-то защищал позицию «трейты зло»

Возможно, неявно написали, но позицию "трейты зло" поддерживает Валентин Удальцов.

Валентин Удальцов (автор канала «Пых») выступит ярым противником трейтов.
Я буду против них четверых в позиции «трейты зло». Вроде бы в самом начале статьи об этом написано :)

Трейты это как деление на ноль.
В общем случае зло/нельзя.


Но если ты сильно умный и умеешь в вышку, то можно.

НЛО прилетело и опубликовало эту надпись здесь

Никто не знает что это значит, но звучит модно.

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

Спасибо за идею!
Как по мне, зло — это использование статических вызовов вместо того, чтобы использовать возможности ООП, идеология Yii тому яркий пример.
НЛО прилетело и опубликовало эту надпись здесь

Что такого плохого в трейтах? Я в начале карьеры наследованием такой лапши написал, что трейтам даже не снилось

Рассматривайте трейт как неявную зависимость.

И после этого оцените, насколько это плохо.

Можно пример? Не понял что вы имеете ввиду

Смотрите.
Если вы используете трейты, то лучше чтобы они реализовывали какие-то конкретные интерфейсы (если без интерфейсов, то вообще все печально).

Так вот наличие реализации интерфейса в трейте для класса выглядит как внешняя зависимость.
Но обычно зависимость мы подключаем как?

class Service 
{
    private SomeInterface $service;

    public function __construct(SomeInterface $service)
    {
        $this->service = $service;
    }

    public function fooMethod()
    {
        $this->service->fooMethodFromInterface();
    }
}


Что происходит в случае трейта?

class Service implements SomeInterface
{
    use SomeTrait;
}


У нас интерфейс реализуется в самом классе, но… барабанная дробь… не самим классом.
Т.е. это вроде не зависимость (в самом же классе реализован метод), и в то же время это нечто внешнее по отношению к классу, т.е. таки зависимость.
Да, но трейты же хороши не для внедрения сервисов, а для случаев когда есть некий функционал повторяющийся функционал но для разных сущностей.

И да и нет.

Формально там, где у вас есть копипаста — то можете заменить трейтом.
Но. При этом вам нужно плотно следить за тем чтобы этот участок кода был как можно дальше от изменений.
Лучше всего под это дело подходит код, который работает с чем-то инфраструктурным.

В целом от 1-2 трейтов особой беды не будет. Проблема приходит тогда когда они приходят массово и в них помещается бизнеслогика.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий