PHP 5.4 ile gelen trait PHP’ye multi-inheritance özelliği getirdi. PHP’de 5.4 ten önce sınıflar sadece single-inheritance alabiliyordu. PHP trait bu duruma çok iyi bir çözüm oldu. Daha esnek bir yapı getirdi.
PHP’de trait nasıl kullanılır?
trait bir kendi başına bir sınıf gibidir. Ama bu trait lerden nesneler kuramıyoruz. Sadece yeni sınıflarda genişletebiliyor yeni metodlar ve alanlar ekleyebiliyoruz. Bir sınıfta istediğimiz kadar trait, bir trait ‘ide istediğimiz kadar sınıfın içinde kullanabiliyoruz. Bir sınıf içinde trait kullanmak için use anahtar kelimesini kullanıyoruz. Namespace ile karıştırılmamalıdır.
Örnek bir trait kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php trait GamePad{ public function Tuş(){ echo "X,Y,A,B"; } } trait Kasa{ public function Rom(){ return "Rom"; } } class PS3{ use GamePad, Kasa; } $konsol = new PS3; echo $konsol->Rom(); $konsol->Tuş(); ?> |
Çıktı:
1 2 |
Rom X,Y,A,B |
Yukarıdaki multi-inheritance için basit bir örnekti. Bir çok sınıf bir çok trait için bir örnek yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php trait GamePad{ public $_marka = "Sony"; public function Tuş(){ echo "X,Y,A,B"; } } trait Kasa{ public function Rom(){ return "Rom"; } } class PS3{ use GamePad, Kasa; public function Oyun($oyun){ echo "PS3 : ".$oyun; } } class Sistem{ public function Görüntü(){ return "PAL"; } } class XBox extends Sistem{ use GamePad, Kasa; public function Görüntü(){ return parent::Görüntü() . " Görüntü"; } } $konsol = new PS3; echo $konsol->Rom(); echo $konsol->_marka; echo $konsol->Oyun("Fifa 13"); $konsol2 = new XBox; echo $konsol2->Görüntü(); ?> |
Çıktı:
1 2 3 4 |
Rom Sony PS3 : Fifa 13 PAL Görüntü |