Вопрос проверяет знание механизма traits и умение повторно использовать код между классами без наследования.
Trait подключается в класс через ключевое слово use внутри тела класса. После подключения методы и свойства trait становятся доступными как будто они написаны в самом классе. Trait помогает переиспользовать общую функциональность в нескольких классах. Это удобно, когда наследование не подходит.
Traits в PHP — это способ “подмешивать” готовую функциональность в разные классы. Это похоже на копирование методов в класс, но управляется языком.
Определение:
Trait — это механизм повторного использования кода: набор методов (и иногда свойств), который можно подключить в один или несколько классов через use.
trait HasUuid {
public function uuid(): string {
return $this->uuid;
}
// protected string $uuid; // условно, может быть свойство
}
Подключение делается внутри класса:
class Order {
use HasUuid;
private string $uuid;
public function __construct(string $uuid) {
$this->uuid = $uuid;
}
}
После этого можно вызывать:
$order = new Order('abc');
echo $order->uuid();
Иногда удобно разбить функциональность на маленькие traits и подключать набором:
class User {
use HasUuid, HasTimestamps;
}
Общие “примеси”:
логирование (HasLogger)
timestamps (HasTimestamps)
работа с UUID (HasUuid)
Повторяемые мелкие методы, которые не тянут на базовый класс
Когда класс уже наследуется от другого класса, а общая функциональность всё равно нужна
Trait подключается через use внутри класса. Это хороший способ переиспользовать небольшие куски поведения между разными классами, когда наследование неудобно или невозможно.