PHP da OOP da Treytlar
Siz allaqachon bilasizki, PHP da bir nechta klasslardan birdaniga meros olish mumkin emas, faqat bittasidan. Ilgari biz bu muammoning yechimini o'rgangan edik: meros o'rniga boshqa klasslar ichida bir klasslarning ob'ektlaridan foydalanish.
PHP da boshqa usul ham mavjud. Bu treytlar dan foydalanishdir. Treyt boshqa klassga kiritish mumkin bo'lgan xususiyatlar va metodlar to'plamidir. Bunda treytning xususiyatlari va metodlari klass tomonidan o'zlariningki kabi qabul qilinadi.
Treytning sintaksisi klassniki bilan bir xil,
faqatgina treyt nomi
trait kalit so'zi yordamida e'lon qilinadi.
Treytning namunasini yaratib bo'lmaydi - treytlar
faqat boshqa klasslarga ulash uchun mo'ljallangan. Ulashning o'zi
use buyrug'i yordamida amalga oshiriladi, undan keyin
bo'shliq bilan ajratilgan holda ulanishi kerak bo'lgan treytning nomi ko'rsatiladi.
Ushbu buyruq klass boshida yoziladi.
Keling, treytlarning qo'llanilishini amaliy misolda ko'rib chiqaylik. Aytaylik, bizda shunday Helper treyti berilgan bo'lib, unda
name va age private xususiyatlari
hamda ularning getterlari mavjud:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Aytaylik, bizda shunday User klassi ham mavjud bo'lib,
uning konstruktorida name va age xususiyatlari
o'rnatilgan:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Keling endi User klassimizning xususiyatlari uchun getterlarni qo'shaylik.
Faqat ularni klassning o'zida yozmaymiz, balki shunchaki Helper
treytini ulaymiz, unda bu metodlar allaqachon amalga oshirilgan:
<?php
class User
{
use Helper; // treytni ulaymiz
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Treyt ulangandan so'ng, klassimizda ushbu treytning metodlari va xususiyatlari paydo bo'ladi. Bunda ularga klassning o'zining metodlari va xususiyatlari kabi murojaat qilamiz:
<?php
$user = new User('john', 30);
echo $user->getName(); // 'john' chiqaradi
echo $user->getAge(); // 30 chiqaradi
?>
name, age, population xususiyatlari
va ular uchun getterlar bilan City klassini amalga oshiring. Klassimiz
o'z kodini qisqartirish uchun biz yaratgan Helper treytidan foydalansin.