Traits for specified class/interface

MiksIr

miksir@home:~$
Не, наоборот - все методы трейта - переносить в этот класс. Так как phpdoc наследуется - в базовый класс. Т.е. реально не так уж и много копипасты в вашем случае. И это уже работает.
 

Adelf

Administrator
Команда форума
@MiksIr, а как это мне поможет в трэйте автокомплит иметь? В классе то я автокомплит трэйтовых методов и так имею - PhpStorm позволяет.
 

AnrDaemon

Продвинутый новичок
Нет, ну вы, сударь, хотите и рыбку съесть и косточкой не подавиться.
 

Adelf

Administrator
Команда форума
@AnrDaemon, ну нормальные люди едят рыбу и косточкой не давятся. Чем я хуже то?
 

MiksIr

miksir@home:~$
Аф, я неправильно понял вопрос, пардон. Не знаю, работает ли PHPдок в трейте. Если да - вполне вариант тоже, почему нет. Не все, но необходимые в трейте можно, почему нет. Увидел подсветку неизвестного метода - проверил - перенес пхпдок.
 

Sufir

Я не волшебник, я только учусь
@MiksIr, а как это мне поможет в трэйте автокомплит иметь? В классе то я автокомплит трэйтовых методов и так имею - PhpStorm позволяет.
Зачем это может быть нужно? Я видимо что-то упускаю, но у меня такой необходимости никогда не было, что бы трейт зависел от методов или свойств класса. Я их вообще не использую никак, кроме как вот таким вот образом:
https://github.com/thephpleague/event/blob/master/src/GeneratorInterface.php
https://github.com/thephpleague/event/blob/master/src/GeneratorTrait.php
https://github.com/thephpleague/event/blob/master/src/Generator.php
Потом фигачишь их в десяток классов и радуешься. Никаких копипаст и костылей через наследование и т.п. Зачем тебе трейт для конкретного класса, если он от его методов и свойств зависит, почему эту функциональность не реализовать в самом класе? Может пример покажешь?

UPD: А, придумал, если основную общую логику вынести в трейт, а один-два метода интерфейса, используемые им, должны в каждом классе быть реализованы по своему.
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
Зачем это может быть нужно? Я видимо что-то упускаю
Трейты могут быть компонентами других трейтов.
Алсо, @Adelf , «The best way to understand what traits are and how to use them is to look at them for what they essentially are: language assisted copy and paste.».
 

Adelf

Administrator
Команда форума
Так и есть. Я их использую как раз чтобы не копипастить.
@Sufir, ты привел простейший случай. А что если мы добавляем функционал к классу или интерфейсу, и хотим юзать все его методы? В C# основной функционал манипулирования коллекциями объектов - LINQ - это просто набор методов-расширений для интерфейсов. Фактически, более приятный аналог трейтов.
Метод-расширение - это когда мы к любому классу или интерфейсу можем добавить метод извне.
Пишем например public static AdditionalMethod(this ICollection target){...} и это ключевое this даёт нам для ЛЮБОГО ICollection делать так - collection.AdditionalMethod();
Linq - мощный механизм и используется почти в любом приложении C#.
можно например так:
PHP:
var persons = new List<Person>(); // List это и IList и ICollection и IEnumerable - любят они там кучу вложенных друг в друга интерфейсов.
// добавляем тут персон в список
var maleAverageAge = persons.Where(p => p.IsMale).Average(p => p.Age);
Очень мощно и удобно. И реализовано такими вот методами расширениями. List ничего не знает о Where или Average. в PHP кстати тоже было бы удобно просто трэйт извне к классу добавить, вместо наследований там...

P.S. Хотя сейчас дошло что из-за автолоадингов наших, о таких мечтах можно забыть :)
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
@Adelf, с семерки любую функцию в любом обьекте запустить можно и все приваты юзать
 

Adelf

Administrator
Команда форума


Обожаю PhpStorm :) Надо будет еще немного подшлифовать... а то он все равно подсвечивает этот метод как отсутствующий в классе.
 
  • Like
Реакции: AmdY

fixxxer

К.О.
Партнер клуба
Кстати, а абстрактных методов в трейтах для твоей задачи недостаточно?
 

Adelf

Administrator
Команда форума
Да честно говоря, мне нужен только автокомплит :)
Там у Eloquent методов под сотню. Какой смысл их всех абстрактить...
Имхо, @target аннотации достаточно вполне.
 
Сверху