Merhabalar arkadaşlar, Mobilhanem.com için hazırladığımız php eğitimlerinde bu ders Zincirleme Methodları göreceğiz. Nedir bu zincirleme methodlar diyecek olursak; kısaca bir sınıftan oluşturulan nesnenin methodlarını tek satırda artarda çağırmak diyebiliriz.
Zincirleme Methodlar
Zincirleme (chain) methodlar bir zincir gibi artarda çağırılabilen methodlardır dedik. Örneğin: $insan->m1()->m2()->m3()….. şeklinde çağırılabilen methodlardır.
Bir methodun zincirleme method olması için geriye her zaman sınıfı döndürmesi gerekir.
public function fo() { ... İşlemler return $this; }
Peki ne işimize yarar bu chain methodlar?
- Kod kalabalığını azaltır.
- kod okunabilirliğini artırır.
- Performansı artırır.
Şimdi normal bir şekilde bir insan sınıfı oluşturalım daha sonra bu sınıfı zincirleme methodlar ile çalışabilecek şekilde düzenleyelim.
Düz mantıkta yazılmış sınıf:
class kisi { private $adSoyad; private $tc; public function __construct() { } public function setAdSoyad($adSoyad){ $this->adSoyad = $adSoyad; } public function setTc($tc){ $this->tc = $tc; } // bilgileri dışardan yazdırabilelim. public function bilgiYazdir() { echo "Ad Soyad: $this->adSoyad | Tc: $this->tc"; } } $kisi = new Kisi(); $kisi->setAdSoyad("Vehbi Akdoğan"); $kisi->setTc("1111"); $kisi->bilgiYazdir();
Yukarıdaki örnekte setAdSoyad() ve setTc() methodlarını iki ayrı satırda başınca $kisi-> nesnesi olacak şekilde kullandık.
$kisi->setAdSoyad()->setTc() şeklinde çalıştırmayı denersek bu method geriye bir değer döndürmüyor tarzında bir hata alırız.
Zincirleme method kurallarına uygun şekilde sınıfımızı düzenleyelim.
<?php /* Bu PHP Dosyasi Vehbi Akdogan Tarafindan Kodlanmistir. E-Posta: [email protected] Web: vehbiakdogan.com */ class kisi { private $adSoyad; private $tc; public function __construct() { } public function setAdSoyad($adSoyad){ $this->adSoyad = $adSoyad; return $this; } public function setTc($tc){ $this->tc = $tc; return $this; } // bilgileri dışardan yazdırabilelim. public function bilgiYazdir() { echo "Ad Soyad: $this->adSoyad | Tc: $this->tc <br/>"; return $this; } } $kisi = new Kisi(); $kisi->setAdSoyad("Vehbi Akdoğan")->setTc("1111")->bilgiYazdir();
Üsteki örnekte 4 satırda işlem yaparken şimdi 2 satıra düşürmüş olduk. Hatta aşağıdaki şekilde yazıp tek satıra da düşürebiliriz.
(new Kisi())->setAdSoyad("Taha Kırca")->setTc("2222")->bilgiYazdir();
Konunun daha iyi anlaşılması için bir örnek daha yapalım.
Hesap Makinesi Örneği
Zincirleme methodlar kullanarak basit dört işlemi gerçekleştirecek bir hesap makinesi tasarlayalım.
class HesapMakinesi { private $sonuc = 0; public function __construct() { } public function topla($a) { $this->sonuc +=$a; return $this; } public function cikar($a) { $this->sonuc -=$a; return $this; } public function carp($a) { $this->sonuc *=$a; return $this; } public function bol($a) { $this->sonuc /=$a; return $this; } public function sonucuGoster() { echo "Sonuç : ".$this->sonuc; return $this; } }
klasik bakkal hesapmakinesi tarzında 4 işlemi gerçekleştirebilen bir hesap bakinesi tasarladık.
Şimdi bu hesap makinesini test etmek için (3*5+4-9)/2 = 5 işlemini hesap makinesinde test edelim.
$makine = new HesapMakinesi(); $makine->topla(3) ->carp(5) ->topla(4) ->cikar(9) ->bol(2) ->sonucuGoster(); // Çıktı // Sonuç : 5
şeklinde hesap makinemizi çalıştırmış olduk. Zincirleme methodlar veri tabanı sınıflarında daha güzel bir şekilde kullanılabiliyor. Şuan henüz veri tabanı işlemlerini görmediğimiz için örnek yapmayacağım. Umarım konu anlaşılmıştır 🙂
Chain methodlar sadece php dilinde değil diğer nesne yönelimli programlama dillerinde de çok sık olarak kullanılmaktadır.
Bir dersimizin daha sonuna geldik. Bir sonraki dersimizde görüşmek üzere
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
Tüm php dersleri için tıklayınız..
3
Elinize sağlık sade gerektiği kadar açıklayıcı olmuş