Ответ 1
В руководстве PHP указано:
Черты - это механизм повторного использования кода в отдельных языках наследования, таких как PHP. Предел предназначен для уменьшения некоторых ограничений одиночного наследования, позволяя разработчику свободно использовать множество методов в нескольких независимых классах, живущих в разных иерархиях классов. Семантика комбинации признаков и классов определяется таким образом, который уменьшает сложность и избегает типичных проблем, связанных с множественным наследованием и Mixins.
Если вы хотите расширить черту, то это, вероятно, должен быть класс. Если у вас есть набор методов в одном классе, которые вы хотите использовать в других, но не рекомендуется расширять класс (например, class Animal extends Vehicle
), то в PHP 5.4 он может хорошо работать как черта.
Чтобы ответить на вопрос более прямо, вы не "расширяете" черту, но можете создавать черты, которые сами используют другие черты. Согласно руководству PHP:
trait Hello {
public function sayHello() {
echo 'Hello ';
}
}
trait World {
public function sayWorld() {
echo 'World!';
}
}
trait HelloWorld {
use Hello, World;
}
class MyHelloWorld {
use HelloWorld;
}
Вы можете считать, что это способ сохранить ваши черты в логических группах и ввести некоторую модульность.
Изменить: увидев некоторые комментарии, я считаю целесообразным отметить, что использование признака в базовом классе также означает, что черта присутствует в любом классе, который ее расширяет, а функции признаков имеют приоритет над базовым классом. Помещение его в дочерний класс просто сделает функции признаков недоступными для родительского/базового класса.
Parent > Trait > Child