Traits dalam OOP di PHP
Seperti yang sudah Anda ketahui, dalam PHP tidak dapat mewarisi dari beberapa kelas sekaligus, hanya dari satu. Sebelumnya kita sudah mempelajari solusi untuk masalah ini: alih-alih pewarisan, gunakan objek dari satu kelas di dalam kelas lain.
Di PHP ada cara lain. Caranya terletak pada penggunaan traits. Sebuah trait merepresentasikan sekumpulan properti dan metode yang dapat disertakan ke dalam kelas lain. Dalam hal ini properti dan metode trait akan dianggap oleh kelas seolah-olah miliknya sendiri.
Sintaks trait sama dengan kelas,
kecuali bahwa nama trait perlu
dideklarasikan menggunakan kata kunci
trait.
Instance trait tidak dapat dibuat - traits
hanya dimaksudkan untuk disambungkan ke
kelas lain. Penyambungan sendiri dilakukan
dengan perintah use, setelah itu
diikuti dengan nama trait yang disambungkan, dipisahkan oleh spasi.
Perintah ini ditulis di awal kelas.
Mari kita lihat penerapan traits pada contoh
praktis. Misalkan kita diberikan trait berikut
Helper, yang berisi properti privat
name dan age, serta getter-nya:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Misalkan kita juga memiliki kelas User berikut,
di dalam konstruktornya properti
name dan age diatur:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Sekarang mari kita tambahkan getter untuk properti
kelas User kita. Hanya saja, jangan
menuliskannya di dalam kelas itu sendiri, tetapi cukup sambungkan
trait Helper, di mana metode-metode ini
sudah diimplementasikan:
<?php
class User
{
use Helper; // menyambungkan trait
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Setelah menyambungkan trait, di kelas kita akan muncul metode dan properti dari trait ini. Dalam hal ini kita akan mengaksesnya seolah-olah sebagai metode dan properti dari kelas itu sendiri:
<?php
$user = new User('john', 30);
echo $user->getName(); // akan menampilkan 'john'
echo $user->getAge(); // akan menampilkan 30
?>
Implementasikan kelas City dengan properti
name, age, population
dan getter untuknya. Misalkan kelas kita untuk
menyingkat kodenya menggunakan trait
Helper yang sudah kita buat.