Ne Öğreneceğim?
- Trait Oluşturma
- Sınıflarda Trait Kullanımı
- Çoklu Trait
Gereksinimler
- PHP 5.4 ve üzeri
Zorluk
- Orta Düzey
Eğitim İçeriği
PHP dilinde nesneler baz alınarak yapılan programlamada ciddi gelişmeler yaşanmaya başladı. 1 Mart 2012 tarihinde piyasaya çıkan 5.4 versiyonundan bu yana kullanılan bir kavram olan Traits. Bu ifadenin Türkçe de ki karşılığı özellikler olarak ifade edilebilir.
C ve Java gibi dillerde extend deyimi ile birden fazla sınıftan katılım yoluyla miras alınarak yeni sınıflar ortaya çıkarılabilmektedir. PHP dili önceden katılma yoluyla birden fazla sınıftan miras alınmasına izin vermiyordu, daha doğrusu ifadeyle bunu karşılayamıyordu. Bu sorunun ortaya çıkmaması için 5.4 ile birlikte Trait yapısı oluşturuldu. Trait, aynı sınıflarda olduğu gibi tanımlanan ama kendi başlarına pek bir anlam ifade etmeyen yapılardır. Bu yapı ancak sınıflar ile birlikte kullanıldığında anlamlı olmaktadır.
imagesource
Trait Oluşturma
Trait yapısının kullanım amacının bir sınıf genişletmek olduğunu, konunun başına ifade etmiştim. Yeni bir Trai oluştururken, bu yapının bir sınıfa miras bırakacağı göz önüne alınmalı ve bu düşünce ile oluşturulmalıdır. Trait yapıları yalnız başlarına örneklenemez, kullanılamaz. Mutlaka çalıştırılması için bir sınıf tarafından kullanılıyor olmalıdır.
Şimdi basit bir sınıf oluşturarak, bu sınıf ile aynı görevleri üstlenecek Trait yapısı oluşturalım.
<?php
class OgrenciSinif {
public $ad;
public $soyad;
public function konus () {
echo $this->ad . ' ' . $this->soyad;
}
}
?>
Yukaıdaki sınıf örneğimizde iki adet özellik (ad ve soyad) tanımlanmış ve sınıfın sahip olduğu bir adet davranış (konus) bulunmaktadır. Buna göe, bu yapıyı ifade edecek Trait ise aşağıdaki gibi olmalıdır.
<?php
trait OgrenciTrait {
public $ad;
public $soyad;
public function konus () {
echo $this->ad . ' ' . $this->soyad;
}
}
?>
Yukarıda ise Trait tanımlaması gerçekleştirilmiştir. Nasıl ki sınıf tanımlamasının başında class deyimi kullanılıyorsa, Trait tanımlaması yapılırken de trait deyimi ile başlanmalıdır. Oluşturulacak yapıda trait deyiminden hemen sonra Trait'in ismi yazılır. Daha sonra ise bildiğimiz sınıf tanımlamasının aynısı.
Sınıflarda Trait Kullanımı
Sürekli olarak Trait'lerin yalnız başına bir anlamı olmadığının ve bu yapının oluşturulmasındaki sebebin sınıflarda çoklu katılımı sağlamak olduğunu ifade ediyorum. Peki, Trait'leri sınıflarda nasıl kullanabiliriz?
<?php
#Karakter seti tanımlaması
header ('content-type:text/html;charset=utf-8')
#Trait
trait Kimlik {
public $ad;
public $soyad;
public functrion konus () {
echo $this->ad . ' ' . $this->soyad;
}
}
#Sınıf
class Ogrenci {
use Kimlik;
}
#Ornekleme
$o = new Ogrenci ();
$o->ad = 'Sedat';
$o->soyad = 'Yildiz';
$o->konus();
#Sonuc: Sedat Yildiz
?>
Yukarıdaki örnekte Kimlik isminde Trait ve Ogrenci isminde bir Class oluşturduk. Eğer bir Trait ile sınıf geliştiriyorsak süslü parantezlerin içerisinde use deyimi ile hangi Trait kullanılarak genişletileceği belirtilmeli. Genişletme sonrası Ogrenci sınıfı, Kimlik yapısında var olan tüm özellik davranışlarına sahip olacaktır.
Çoklu Trait
İşte asıl konumuz burada başlıyor. Artık sınıflar tek bir noktadan miras almak zorunda değildir. Bu bölümde birden fazla Trait yapısı kullanarak tek bir sınıfa miras vereceğiz. Böylece PHP geliştiricilerinin sıkıntıya düştüğü çoklu katılım sorununu bir nebze çözmeye çalışacağız.
<?php
header('content-type:text/html;charset=utf8');
#Trait
trait Kimlik {
public $ad;
public $soyad;
public function konus() {
echo $this->ad . ' ' . $this->soyad . ';
}
}
Trait Notlar {
public $sozlu;
public $yazili;
public function notGor () {
echo 'Sözlü sınav notu ' . $this->sozlu . '
;
echo 'Yazılı sınav notu ' . $this->yazili;
}
}
#Sınıf
class Ogrenci {
use Kimlik, Notlar;
}
#Örnekleme
$o = new Ogrenci ();
$o->ad = 'Sedat';
$o->soyad = 'Yildiz';
$o->konus();
$o->sozlu = 80;
$o->yazili = 90;
$o->notGor();
?>
Buradaki örnekte **Kimlik **ve Notlar isminde iki adet birbirinden farklı Trait tanımladık. Daha sonra ise bu iki Trait kullanılarak Ogrenci isminde yeni bir sınıf oluşturduk. Sınıf oluştrurken birden fazla Trait miras alacğaı için use deyiminden sonra misra alınacak Trait isimleri virgül ile birbirinden ayırdık. Artık Ogrenci isimli sınıfın ad, soyad, sozlu ve yazili olmak üzere 4 adet özelliği, konus() ve notGor() isimli 2 adet davranışı olmuş oldu.
Katkılarından dolayı Sercan Çakır'a teşekkürler.
Posted on Utopian.io - Rewarding Open Source Contributors
Hocam emeğinize sağlık :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teşekkür ederim :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
An excellent and useful article.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you very much!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
çok güzel bir çalışma benimde ilgimi çekti umarım emeğinizin karşılığıda gelir utopıandan bende çevirilere başlayacağım fransızca olarak umarım işler yolunda gider başarılarınızın devamını dilerim
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teşekkür ederim, hayırlısı olsun sizin için de.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you so much.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hey @sedatyildiz I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit