Treiti OOP PHP
Kā jūs jau zināt, PHP nevar mantot no vairākām klasēm uzreiz, tikai no vienas. Iepriekš mēs jau esam apskatījuši šīs problēmas risinājumu: mantojuma vietā izmantot objektus vienu klasi citās.
PHP ir arī cits veids. Tas ir treitu izmantošana. Treits reprezentē īpašību un metožu kopumu, ko var iekļaut citā klasē. Šajā gadījumā īpašības un treita metodes tiks uztvertas ar klasi it kā savas.
Treita sintakse ir tāda pati kā klasei,
izņemot to, ka treita vārds ir jādefinē
izmantojot atslēgvārdu
trait.
Nevar izveidot treita instances - treiti
ir paredzēti tikai pievienošanai citām
klasēm. Pašu pievienošanu veic
ar komandas use palīdzību, pēc kuras
caur atstarpi tiek norādīts pievienojamā
treita vārds. Šī komanda tiek rakstīta klases sākumā.
Apskatīsim treitu izmantošanu praktiskā
piemērā. Pieņemsim, ka mums ir dots šāds treits
Helper, kas satur privātās īpašības
name un age, kā arī to getterus:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Pieņemsim, ka mums ir arī šāda klase User,
kuras konstruktorā tiek iestatītas īpašības
name un age:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Tagad pievienosim getterus īpašībām
mūsu klases User. Tikai nerakstīsim
tos pašā klasē, bet vienkārši pievienosim
treitu Helper, kurā šīs metodes
jau ir realizētas:
<?php
class User
{
use Helper; // pievienojam treitu
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Pēc treita pievienošanas mūsu klasē parādīsies šī treita metodes un īpašības. Šajā gadījumā mēs pie tiem piekļūsim it kā pie pašas klases metodēm un īpašībām:
<?php
$user = new User('john', 30);
echo $user->getName(); // izvadīs 'john'
echo $user->getAge(); // izvadīs 30
?>
Realizējiet klasi City ar īpašībām
name, age, population
un getteriem tiem. Lai mūsu klase
sava koda saīsināšanai izmantotu jau mūsu izveidoto
treitu Helper.