Каковы возможные сценарии использования для Traits в PHP?

Возможный дубликат:
черты в php – примеры реальных примеров / лучших практик?

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

Один из сценариев я понял, что нуждается в чертах:

  • Мероприятия. Вместо того, чтобы иметь один класс, который реализует шаблон наблюдателя и позволяющий всем другим классам наследовать его, просто сделайте его признаком и пусть классы, которые хотят запускать события или подписываться на использование этого признака. Например, структура Yii делает это неправильно, реализуя материал в классе CComponent, а не используя Trait.

В основном функциональность, которая может быть разделена между классами, но может распространяться по нескольким иерархиям классов, должна использовать черты. Какие другие сценарии могли бы использовать Черты, а не систему событий?

Проблема, связанная с адресами Traits, аналогична тем, что Java-адреса с интерфейсами – как обеспечить соблюдение общего поведения (как представлено интерфейсами) среди классов, которые не находятся в одной иерархии классов.

С такими языками, как C ++, которые имеют только наследование, для двух объектов из двух разных классов, которые должны использоваться в одном контексте, требующих такого же поведения, два класса должны были быть из одной и той же иерархии. Иногда это означало создание довольно искусственных иерархий, чтобы позволить использовать объекты из разных классов в одном контексте.

Java решает эту проблему через интерфейсы – интерфейс – это, по сути, договор, регулирующий поведение, так что объект одного класса может быть заменен объектом отдельного класса, потому что он обещает такое же поведение – интерфейс. Но они не должны быть из одной иерархии.

PHP-черты воплощают эту идею. Характеристика – это своего рода интерфейс, набор поведения, который содержит класс, чтобы его можно было использовать в контексте, который требует такого поведения. Таким образом, любой пример интерфейса Java должен переноситься на пример PHP Traits. PHP-признаки немного отличаются от интерфейсов Java, хотя, поскольку Traits может содержать полные определения функций, тогда как интерфейсы Java могут содержать только объявления (типичные PHP-особенности)!