PHP-тегі ООП-да трейттар
Сіз білетіндей, PHP-те бірден бірнеше кластан мұрагерлік ету мүмкін емес, тек біреуінен ғана. Бұған дейін біз бұл мәселені шешуді өткенбіз: mұрагерлік етудің орнына басқа кластардың объектілерін пайдалану.
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;
}
}
?>
Енді User класымыздың қасиеттеріне геттерлер қосамыз. Тек оларды
кластың өзінде жазбай-ақ, бізде бұл әдістер іске асырылған 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
?>
name, age, population қасиеттері және оларға геттерлері
бар City класын іске асырыңыз. Біздің клас өз кодын қысқарту үшін біздің
жасаған Helper трейтімізді пайдалансын.