Traits
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