Traits представляют группу методов, которые могут быть добавлены в классы. Traits позволяют определять блоки функционала и многократно повторно использовать в классах без необходимости усложнять код классов, которые используют эти методы.
Traits определяются с помощью ключевого словва trait, после которого идет название трейта:
trait Printer { }
Traits могут содержать только статические и нестатические методы:
trait Printer { public function printSimpleText($text) { echo "$text<br>"; } public function printHeaderText($text) { echo "<h2>$text<h2>"; } }
Для применения классов трейта применяется оператор use, после которого указывается добавляемый трейт:
trait Printer { public function printSimpleText($text) { echo "$text<br>"; } public function printHeaderText($text) { echo "<h2>$text<h2>"; } } class Message { use Printer; } $myMessage = new Message(); $myMessage->printSimpleText("Hello World!"); $myMessage->printHeaderText("Hello PHP 8");
После добавления трейта с помощью оператора use
класс может использовать его методы, как-будто они определены в самом этом классе.
Следует учитывать, что при наследовании методы трейта переопределяют унаследованные методы с тем же именем:
class Data { function print() { echo "Print from Data"; } } trait Printer { function print() { echo "Print from Printer"; } } class Message extends Data { use Printer; } $myMessage = new Message(); $myMessage->print(); // Print from Printer