Traits
Traits reprezintă un grup de metode care pot fi adăugate în clase. Traits permit definirea blocurilor de funcționalitate și reutilizarea lor multiplă în clase, fără a complica codul claselor care folosesc aceste metode.
Traits sunt definite cu ajutorul cuvântului cheie trait, urmat de numele trait-ului:
trait Printer { }
Traits pot conține doar metode statice și nestatice:
trait Printer
{
public function printSimpleText($text) { echo "$text<br>"; }
public function printHeaderText($text) { echo "<h2>$text</h2>"; }
}
Pentru a aplica un trait într-o clasă, se folosește operatorul use, urmat de numele trait-ului:
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");
După adăugarea trait-ului cu ajutorul operatorului use, clasa poate utiliza metodele acestuia ca și cum ar fi definite în clasa respectivă.
Trebuie de avut în vedere că la moștenire, metodele trait-ului suprascriu metodele moștenite cu același nume:
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
În acest exemplu, clasa Message moștenește clasa Data și utilizează trait-ul Printer. Metoda print() definită în Printer suprascrie metoda print() moștenită din Data, rezultând în afișarea mesajului "Print from Printer".