Никита Попов: Трейты не люблю особо. Я участвую в разработке с PHP 5.5, а их добавили в 5.4. Если бы я тогда был, их бы точно не добавили.
Аргументы есть какие-нибудь, или это чисто субъективное мнение?
Зовите тогда Попова чтобы хоть кто-то защищал позицию «трейты зло»
Возможно, неявно написали, но позицию "трейты зло" поддерживает Валентин Удальцов.
Валентин Удальцов (автор канала «Пых») выступит ярым противником трейтов.
Трейты это как деление на ноль.
В общем случае зло/нельзя.
Но если ты сильно умный и умеешь в вышку, то можно.
>developer advocate в SpiralScout
>developer advocate
Никто не знает что это значит, но звучит модно.
и где-то на фоне заиграет идийская музыка
Спасибо за идею!
Трейты — всего лишь инструмент, и его можно использовать как во зло, так и во благо. Дело в опыте, навыках и кривизне рук.
Однако если инструмент используется преимущественно для зла и может сделать мир лучше только в очень редких случаях, то я бы не хотел его существования.
Вот глушилка радиосвязи для бытовых диапазонов — это хорошо или плохо в современном реальном мире?
Что такого плохого в трейтах? Я в начале карьеры наследованием такой лапши написал, что трейтам даже не снилось
И после этого оцените, насколько это плохо.
Можно пример? Не понял что вы имеете ввиду
Если вы используете трейты, то лучше чтобы они реализовывали какие-то конкретные интерфейсы (если без интерфейсов, то вообще все печально).
Так вот наличие реализации интерфейса в трейте для класса выглядит как внешняя зависимость.
Но обычно зависимость мы подключаем как?
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 трейтов особой беды не будет. Проблема приходит тогда когда они приходят массово и в них помещается бизнеслогика.
Что не так с трейтами?