PHP - Ce sunt trăsăturile (traits)?
O trăsătură (trait) este un mod de a partaja metode între clase: scrii metodele o singură dată, iar orice clasă care are nevoie de ele le poate prelua.
Un trait poate conține atât metode obișnuite, cât și metode abstracte, iar aceste metode pot folosi orice modificator de acces (public, private sau protected).
Astfel, trait-urile devin un instrument de reutilizare a codului, deoarece mai multe metode pot fi adăugate liber în multe clase diferite.
Definirea unei trăsături
Începe cu cuvântul cheie trait, apoi dă-i trait-ului un nume:
Sintaxa unei trăsături
Forma de bază a definiției unui trait:
<?php
trait TraitName {
// some code...
}
?>
Folosirea trăsăturii
În interiorul unei clase, scrie cuvântul cheie use și numele trait-ului ca să îl incluzi.
Exemplul următor are un trait numit message1 și o clasă numită Welcome care îl folosește. Astfel, toate metodele din trait sunt disponibile în clasă.
Sfat: Orice altă clasă care are nevoie de msg1() poate folosi message1 în același mod. Eviți codul duplicat, pentru că aceeași metodă nu mai trebuie declarată din nou și din nou.
Exemplu
Welcome folosește un trait, așa că obiectele ei pot apela metoda trait-ului:
Ieșire: script PHP
<?php
// Definim o trăsătură (trait)
trait message1 {
public function msg1() {
echo "POO în PHP e distractiv! ";
}
}
// Folosim trăsătura într-o clasă
class Welcome {
use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
Folosirea unei trăsături într-o clasă
Cum include o clasă un trait:
<?php
class MyClass {
use TraitName;
}
?>
PHP - Două clase și o trăsătură
Aici, un singur trait, message1, are trei metode publice, iar două clase, Welcome și Welcome2, îl folosesc. Ambele clase primesc toate cele trei metode, dar nu trebuie să le apeleze pe toate: codul apelează doar una pe Welcome și toate trei pe Welcome2.
Exemplu
Același trait servește două clase, care apelează metode diferite din el:
Ieșire: script PHP
<?php
trait message1 {
public function msg1() {
echo "POO în PHP e distractiv! ";
}
public function msg2() {
echo "Trăsăturile reduc duplicarea codului! ";
}
public function msg3() {
echo "Hello World!";
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
$obj2->msg3();
?>
PHP - Folosirea mai multor trăsături
O clasă nu este limitată la un singur trait. Acest exemplu are două trait-uri, message1 și message2, și două clase. Welcome folosește doar message1, în timp ce Welcome2 le folosește pe amândouă, cu o virgulă între numele trait-urilor.
Exemplu
Welcome2 enumeră două trait-uri, separate prin virgulă:
Ieșire: script PHP
<?php
trait message1 {
public function msg1() {
echo "POO în PHP e distractiv! ";
}
}
trait message2 {
public function msg2() {
echo "Trăsăturile reduc duplicarea codului!";
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
?>