Информация

Дата основания
Местоположение
Россия
Сайт
www.skyeng.team
Численность
1 001–5 000 человек
Дата регистрации

Блог на Хабре

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

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

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

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

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


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

>Кирилл Несмеянов, developer advocate в SpiralScout, член программного комитета PHP Russia
>developer advocate в SpiralScout
>developer advocate

image

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

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

Спасибо за идею!
Как по мне, зло — это использование статических вызовов вместо того, чтобы использовать возможности ООП, идеология 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 трейтов особой беды не будет. Проблема приходит тогда когда они приходят массово и в них помещается бизнеслогика.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.