PHPдеги ООПдо трейттер
Өзүңүз билгендей эле, PHPде бир нече класстан бир эле учурда мурастай албайсыз, бир гана класстан мурастай аласыз. Биз бул көйгөйгө чечимди мурда эле өтүп көргөнбүз: мурас коюунун ордуна класстардын биринин объектерин башкаларынын ичинде колдонуу.
PHPде дагы бир ыкма бар. Ал трейттер колдонууда турат. Трейт башка класска кошулушу мүмкүн болгон касиеттер менен методдордун жыйындысын көрсөтөт. Бул учурда трейттин касиеттери жана методдору класска өздөрүнүкү сыяктуу сезилет.
Трейттин синтаксиси класстыкы сыяктуу эле,
алардан айырмасы, трейттин атын
trait деген ачкыч сөз менен
жарыялоо керек.
Трейттин дарегин түзүүгө болбойт - трейттер
башка класстарга туташтыруу үчүн гана атайындалышкан. Туташтыруу өзү
use буйругу менен ишке ашат, андан кийин
боштук менен айырмаланган туташтырыла турган трейттин аты көрсөтүлөт.
Бул буйрук класстын башында жазылат.
Трейттерди колдонууну практикалык
мисалда карап көрөлү. Бизге приват касиеттери
name жана age, ошондой эле алардын геттерлерин камтыган
мындай Helper трейти берилсин:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Ошондой эле бизде куруучусунда name жана age касиеттери
берилген мындай User классы бар болсун:
<?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 чыгарат
?>
City классты name, age, population
касиеттери жана алар үчүн геттерлер менен ишке ашырыңыз. Биздин класстыбыз
өз кодуң кыскартуу үчүн биз түзгөн Helper трейтин колдонсун.