Տրեյթները OOP-ում PHP-ում
Ինչպես արդեն գիտեք, PHP-ում հնարավոր չէ միանգամից բազմաթիվ դասերից ժառանգել, միայն մեկից: Նախկինում մենք արդեն անդրադարձել էինք այս խնդրի լուծմանը. ժառանգելու փոխարեն օգտագործել մի դասի օբյեկտներ մյուսների ներսում:
PHP-ում կա մեկ այլ եղանակ: Այն կայանում է տրեյթներ օգտագործելու մեջ: Տրեյթը ներկայացնում է հատկությունների և մեթոդների մի շարք, որոնք կարող են ներառվել մեկ այլ դասի մեջ: Այս դեպքում հատկությունները և տրեյթի մեթոդները դասի կողմից կընկալվեն ասես որպես իրենց սեփականը:
Տրեյթի շարահյուսությունը նույնն է, ինչ դասինը,
բացառությամբ, որ տրեյթի անունը պետք է
հայտարարվի օգտագործելով
trait բանալի բառը:
Տրեյթի օրինակ չի կարելի ստեղծել - տրեյթները
նախատեսված են միայն այլ դասերին միանալու համար:
Միացումն իրականացվում է
use հրամանի միջոցով, որից հետո
բացատով նշվում է միացվող տրեյթի անունը:
Այս հրամանը գրվում է դասի սկզբում:
Եկեք տեսնենք տրեյթների կիրառությունը գործնական
օրինակով: Ենթադրենք մենք ունենք այսպիսի տրեյթ
Helper, որը պարունակում է պրիվատ հատկություններ
name և age, ինչպես նաև դրանց գետտերները.
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Ենթադրենք մենք ունենք նաև այսպիսի User դաս,
որի կոնստրուկտորում սահմանվում են name
և age հատկությունները.
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Եկեք այժմ ավելացնենք գետտերներ մեր դասի
հատկությունների համար: Միայն չենք
դրանք գրի դասի ներսում, այլ պարզապես կմիացնենք
Helper տրեյթը, որում այդ մեթոդներն
արդիրեալացված են.
<?php
class User
{
use Helper; // միացնում ենք տրեյթը
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Տրեյթը միացնելուց հետո մեր դասում կհայտնվեն այդ տրեյթի մեթոդներն ու հատկությունները: Այս դեպքում դրանց կդիմենք ասես դասի սեփական մեթոդներին և հատկություններին.
<?php
$user = new User('john', 30);
echo $user->getName(); // կարտածի 'john'
echo $user->getAge(); // կարտածի 30
?>
Իրականացրեք City դասը name,
age, population հատկություններով
և դրանց համար գետտերներով: Թող մեր դասը
իր կոդը կրճատելու համար օգտագործի արդեն մեր ստեղծած
Helper տրեյթը: