Trait dalam OOP dalam PHP
Seperti yang anda sudah tahu, dalam PHP tidak boleh mewarisi dari beberapa kelas sekaligus, hanya dari satu. Sebelum ini kita sudah mempelajari penyelesaian masalah ini: selain pewarisan, gunakan objek daripada satu kelas di dalam kelas lain.
Dalam PHP ada cara lain. Ia terdiri daripada penggunaan trait. Trait mewakili satu set sifat dan kaedah yang boleh disertakan dalam kelas lain. Dalam kes ini, sifat dan kaedah trait akan dianggap oleh kelas seperti miliknya sendiri.
Sintaks trait adalah sama seperti kelas,
kecuali nama trait perlu
disebutkan dengan menggunakan kata kunci
trait.
Instance trait tidak boleh dibuat - trait
hanya bertujuan untuk disambungkan kepada kelas lain.
Sambungan itu sendiri dilakukan
dengan perintah use, selepas itu
disebutkan nama trait yang disambungkan, dipisahkan dengan ruang.
Perintah ini ditulis di awal kelas.
Mari kita lihat penggunaan trait dalam contoh
praktikal. Katakan kita mempunyai trait berikut
Helper, mengandungi sifat persendirian
name dan age, serta getter mereka:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Katakan kita juga mempunyai kelas User berikut,
di dalam konstruktornya sifat
name dan age ditetapkan:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Sekarang mari kita tambahkan getter untuk sifat
kelas User kita. Hanya jangan
tuliskannya dalam kelas itu sendiri, tetapi sambungkan sahaja
trait Helper, di mana kaedah-kaedah ini
sudah dilaksanakan:
<?php
class User
{
use Helper; // sambungkan trait
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Selepas menyambungkan trait, dalam kelas kita akan muncul kaedah dan sifat trait ini. Dalam kes ini kita akan merujuk kepada mereka seolah-olah kaedah dan sifat kelas itu sendiri:
<?php
$user = new User('john', 30);
echo $user->getName(); // akan memaparkan 'john'
echo $user->getAge(); // akan memaparkan 30
?>
Laksanakan kelas City dengan sifat
name, age, population
dan getter untuk mereka. Biarkan kelas kita untuk
menyingkatkan kodnya menggunakan trait
Helper yang sudah kita buat.