Treytlarin PHP-də OOP-də istifadəsi
Artıq bildiyiniz kimi, PHP-də bir neçə klasdan bir anda miras almaq mümkün deyil, yalnız birindən. Biz artıq bu problemin həllini keçmişdik: miras almaq əvəzinə digər klasların obyektlərindən istifadə etmək.
PHP-də başqa bir üsul da var. Bu üsul treytlər istifadə etməkdir. Treyt digər klaslara əlavə edilə bilən xassələr və metodlar toplusudur. Bu zaman treytin xassələri və metodları klas tərəfindən öz kimi qəbul edilir.
Treytin sintaksisi klasla eynidir,
istisna olaraq treytin adı
trait açar sözü ilə elan edilməlidir.
Treytin nümunəsini yaratmaq mümkün deyil - treytlər
yalnız digər klaslara qoşulmaq üçün nəzərdə tutulub.
Özü qoşulma use əmri ilə həyata keçirilir,
ondan sonra boşluqla qoşulan treytin adı göstərilir.
Bu əmr klasın əvvəlində yazılır.
Gəlin treytlərin tətbiqini praktiki misalda nəzərdən keçirək.
Tutaq ki, bizdə Helper treyti verilib,
hansı ki, name və age private xassələrini
və onların getterlərini ehtiva edir:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Tutaq ki, bizdə həmçinin User klası var,
onun konstruktorunda name və age
xassələri təyin edilib:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Gəlin indi User klasımızın xassələri üçün
getterlər əlavə edək. Ancaq onları birbaşa klasın
özündə yazmayaq, sadəcə artıq bu metodların reallaşdığı
Helper treytini qoşaq:
<?php
class User
{
use Helper; // treyti qosuruq
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Treyt qoşulduqdan sonra klasımızda həmin treytin metodları və xassələri peyda olacaq. Bu zaman biz onlara klasın öz metodları və xassələri kimi müraciət edə biləcəyik:
<?php
$user = new User('john', 30);
echo $user->getName(); // 'john' cixardacaq
echo $user->getAge(); // 30 cixardacaq
?>
name, age, population
xassələri və onlar üçün getterlər olan
City klasını reallaşdırın. Qoy klasımız
öz kodunu qısaltmaq üçün artıq yaratdığımız
Helper treytindən istifadə etsin.