PHP Zincirleme Method (Chain Method) Kullanımı
Hepinize merhaba dostlarım 😊. Bu yazımda sizlere PHP programlama dili üzerinde OOP mimarisinde kullanılan, frameworklerde (Laravel olsun CodeIgniter olsun vs) sıklıkla ama sıklıkla karşılaştığımız, yazılım mülakatlarında da karşımıza çıkma durumu yüksek konulardan birisi olan Zincirleme Method (Chain Method) kullanımını göstereceğim
Zincirleme method nedir diye soracak olursanız dostlarım size teorik bir anlatımdan çok işin mantığını anlatmak isterim. Bizim bir sınıf ile çalıştığımız durumlarda bir methoddan gelen değer bu sınıfın değişkenine yazdırıldığı zaman başka bir methodu kullanmamız için bir alt satıra inip başka bir methodu çağırıyorduk ya zincirleme method kullanımında ise bu methodlar sınıfı geri döndüre döndüre ilerleyip bütün bu işlemleri tek satıra indirgemeye yarıyor. Normalde biz bir class oluşturduğumuz zaman methodlarla olan işlemi nasıl yapardık mesela. Aşağıdaki gibi değil mi
<?php
$okul = new Okul();
$okul->studentName("MFSoftware Blog");
$okul->lesson("Kimya");
$okul->score(95);
$okul->printInfo();
şeklinde bir öğrencinin bilgilerini methodlar aracılığıyla tutulup ekrana bastırılması gerektiği zamanlarda birden fazla satır işgal ediliyor ve bu da kod okunabilirliğini bir nebze olsun olumsuz etkiliyordu. Ama zincirleme bir method kullanırsak bu işlem
<?php
$okul = new Okul();
$okul->studentName("MFSoftware Blog")->lesson("Kimya")->score(95)->printInfo();
şeklinde hızlıca ayarlanıp daha hızlı ve daha pratik şekilde işleme girmesini sağlıyor. Gördünüz deği mi işlemin ne kadar hızlı ve pratik olduğunu. İşte zincirleme method tam olarak budur dostlar. Şimdi sözü daha fazla uzatmadan hemen zincirleme method oluşturmaya geçelim
ZİNCİRLEME METHOD (CHAIN METHOD) OLUŞTURMA
Eveeet artık zincirleme methodun amacını tam anlamıyla öğrendiğimize göre artık kendi zincirleme methodumuzu oluşturma kısmımıza gelelim. Öncelikle bir index.php dosyası oluşturalım dostlar ve içerisine
<?php
class Okul{
public $ogrenci;
public $ders;
public $not;
public function ogrenci($adsoyad=""){
$this->ogrenci = $adsoyad;
}
public function ders($ders=""){
$this->ders = $ders;
}
public function not($not = ""){
$this->not = $not;
echo "<b>Ad Soyad: </b> $this->ogrenci <b>Ders: </b> $this->ders <b>Alınan Not: </b> $this->not";
}
}
$okul = new Okul();
$okul->ogrenci("MFSoftware Blog")->ders("Kimya")->not(95);
şeklinde kodlarımızı yazalım. Bu kodu çalıştırdığımızda ekranımıza bir hata mesajı gelecektir. Bu hata mesajına baktığımızda ise
Uncaught Error: Call to a member function ders() on null
şeklinde bir yazı yazmakta. Bu yazıda bize program diyor ki dostlarım "Dostum sen zincirleme method kullanmak istiyorsun tamam güzel de ders() methodundan önceki kullandığın method bu sınıfı geri döndürmeli. Yoksa işlem yapamam" diyor.
İşte şimdi geldik önemli kısmımıza dostlarım. Bizim zincirleme method kullanımında önemli bir kodumuz var. Bu kodumuz
return $this;
komutumuzdur. Çağrılan her methoddan bir önceki gelen method içinde bu sınıfın geri döndürülmesini isteyeceğiz. Yalnız bu komutu da methoddaki işlemlerin en altına yazmamız gerekmekte bunu siz de biliyorsunuz :). İşlemlerin hepsi gerçekleşecek daha sonra return edilecek. Sözü daha fazla uzatmadan ders() methodundan önceki gelen methodumuzun en altına return $this komutumuzu ekleyelim
<?php
class Okul{
public $ogrenci;
public $ders;
public $not;
public function ogrenci($adsoyad=""){
$this->ogrenci = $adsoyad;
return $this;
}
public function ders($ders=""){
$this->ders = $ders;
}
public function not($not = ""){
$this->not = $not;
echo "<b>Ad Soyad: </b> $this->ogrenci <b>Ders: </b> $this->ders <b>Alınan Not: </b> $this->not";
}
}
$okul = new Okul();
$okul->ogrenci("MFSoftware Blog")->ders("Yazılım")->not(95);
şeklinde ekledik kodumuzu. Tekrardan çalıştırdığımızda ise yine bir hata ile karşılaşacağız. Bu hatada ise ekranımıza gelecek olan yazı
Uncaught Error: Call to a member function not() on null
şeklindedir. Bu hatada programın istediği de bir önceki hata mesajdakiyle hemen hemen aynıdır dostlarım. "Dostum not() methodundan önceki çağırdığın method da bu sınıfı geri döndürmüyor. Ona da bir el atıver sana zahmet" şeklinde bize mesaj veriyor. Hemen kodlama kısmımızı açalım ve
<?php
class Okul
{
public $ogrenci;
public $ders;
public $not;
public function ogrenci($adsoyad = "")
{
$this->ogrenci = $adsoyad;
return $this;
}
public function ders($ders = "")
{
$this->ders = $ders;
return $this;
}
public function not($not = "")
{
$this->not = $not;
echo "<b>Ad Soyad: </b> $this->ogrenci <b>Ders: </b> $this->ders <b>Alınan Not: </b> $this->not";
}
}
$okul = new Okul();
$okul->ogrenci("MFSoftware Blog")->ders("Kimya")->not(95);
şeklinde kodlarımızı düzeltelim. Şimdi gelip bunu çalıştırdığımızda ise ekranımıza
Ad Soyad: MFSoftware Blog Ders: Kimya Alınan Not: 95
şeklinde bir mesaj bastırılıyor dostlarım. İşte zincirleme methodun kullanımı bu kadar basit ve rahat. Normalde birden fazla satır kullanıp yani şöyle
<?php
$okul = new Okul();
$okul->ogrenci("MFSoftware Blog");
$okul->ders("kimya");
$okul->not(95);
olarak yapacağımız işlemi zincirleme method kullanımıyla sınıfımızı tekrar tekrar döndürerek
<?php
$okul = new Okul();
$okul->ogrenci("MFSoftware Blog")->ders("Kimya")->not(95);
şeklinde pratik bir şekilde yazmış olduk. Dikkat ederseniz daha düzgün ve daha temiz bir kodlama yapmamıza da sebep oluyor dostlarım. İşte bütün işlem bundan ibaret
Artık gelelim ve bir örnek yapalım bunlarla ilgili. Konuyu anladık iyi güzel ama bunların da pekiştirilmesi lazımdır. O halde sözü daha fazla uzatmadan hemen kodlama kısmımıza geçelim
<?php
class Cars
{
public $cars = [];
public function my_cars(array $cars)
{
foreach ($cars as $car) {
$this->cars[] = $car;
}
return $this;
}
public function ekranaBas()
{
foreach ($this->cars as $car){
echo $car."<br>";
}
return $this;
}
}
$car = new Cars();
$car->my_cars(["Tesla","Maserati","Porsche"])->ekranaBas();
şeklinde kodlarımızı yazalım dostlar. Burada süreç nasıl işledi diye soracak olursanız hemen size anlatayım
- Cars isminde bir class oluşturduk
- Oluşturduğumuz bu class içerisinde $cars isimli bir dizi oluşturduk
- Daha sonra my_cars() isimli bir method oluşturduk. Buna dışarıdan dizi türünde bir parametre almasını söyledik ve gelen bu dizi parametresini foreach döngüsü ile dönüp cars içine aktarmak işlemimizi yazdık. Sonrasında ise bu sınıfı geri döndürmek için return $this yazdık
- Bu class ımızın içerisinde ekranaBas() şeklinde bir method oluşturduk ve bu methodda da cars isimli dizimizin içeriğini ekrana bastırma işlemimizi yazdık. Sonrasında da sınıfımızı geri döndürdük
- Ve geldik en son aşamalardan birisi olan bu sınıfımızı kullanmak için nesne oluşturma işlemine. $car isimli nesnemizi oluşturduk ve Cars isimli class ımızı kullanmak istediğimizi belirttik
- Daha sonra zincirleme methodumuz ile önce dizimizi gönderip daha sonra da ekrana bastırma işlemini gerçekleştirdik
adımlar bu şekilde dostlarım. Şimdi browser kısmımızı açalım. Ekranımıza baktığımızda
Tesla
Maserati
Porsche
şeklinde bir çıktı göreceğiz. Buradan da anlaşılan o ki yazığımız kodlar ve oluşturduğumuz zincirleme method sorunsuz bir şekilde çalışıyor :). Bütün olay bundan ibaret
Eveeeet dostlarım 😊. Bu yazımda sizlere PHP programlama dili üzerinde Zincirleme Method nedir ?, nasıl kullanılır bundan elimden geldiğince anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin. Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Bu aşamada sizlerden isteğim her yazımın altında da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır :). Ayrıca bu konuyla ilgili de bol bol pratik yapın derim. Yazılım mülakatlarında özellikle ama özellikle OOP Mimarisi soruları geldiği için bu konuları bilmeniz sizi bir adım daha ön plana taşır.
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer