All that traits

Inheritance allows classes to reuse the code vertically while the traits allow classes reuse the code horizontally.
…по този начин елиминирайки необходимостта от това да правим тежки „вертикални“ йерархични структури от наследяващи се класове.

Трейтовете могат да имат абстрактни методи, подобно на абстрактните класове, за да задължат използващите (use) ги класове, задължително да ги имлементират.

Трейтовете могат да имат пропъртита както обикновените класове.

Трейтовете могат да имат стаични пропъртита и методи, но не и константи.
Гърми с „Traits cannot have constants…“

Трейт обект не прави.

An inherited member from a base class is overridden by a member inserted by a Trait. The precedence order is that members from the current class override Trait methods, which in turn override inherited methods.
Редът на оверрайдване е: клас методите и пропъртитата оверрайдват тези на трейта, които пък (на трейта) оверрайдват тези на родителският клас. Демек, трейтовете се „вмъкват“ между класа и класа-родител.

Какво ако имаме повече от един трейт, използвани и те имат методи с повтарящи се имена?
If two Traits insert a method with the same name, a fatal error is produced, if the conflict is not explicitly resolved.

Може, но трябва с insteadof да се укаже изрично от кой трейт коя функция ще използваме.

В използващият клас можем да сменяме видимостта на трейт-методът.

Трейтове могат да използват други трейтове. Така можем да си разпределяме и комбинираме трейтове.

Traits can also define properties. If a trait defines a property then a class can not define a property with the same name unless it is compatible (same visibility and initial value), otherwise a fatal error is issued.

Литература:

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *