php - method chaining - object oriented programming
php 5 ile gelen oop geliştirmelerinden birisi de class'ların sahip olduğu function'ların (method) object'leri return edebilmesidir. tam türkçe kullanacak olursam sınıfların fonksiyonlarının nesneleri döndürebilmesidir.
bu olayın güzelliği şöyle bir kod yazmamıza izin vermesidir.
$object->method1()->method2()->method3()->...
peki bu tarz bir yazım bize ne kazandırır? kodumuzun okunabilirliğini arttırır ve tekrarlardan kurtulmamızı sağlar.
çalışan bir örnekle yazıma devam edeceğim. geleneksel yöntemle yazacağımız kod bloğu şöyle olacaktır:
<?php
class kisi
{
private $ad;
private $yas;
public function __construct() { }
public function set_ad($ad)
{
$this->ad = $ad;
}
public function set_yas($yas)
{
$this->yas = $yas;
}
public function goster()
{
echo 'Merhaba benim adım ' . $this->ad . '. ' . $this->yas . ' yaşındayım';
}
}
$kisi = new kisi();
$kisi->set_ad('Emrah');
$kisi->set_yas('23');
$kisi->goster();
?>
ekran çıktısı
Merhaba benim adım Emrah. 23 yaşındayım
geleneksel yöntemdeki karmaşanın göze batmaması imkansız. artan satır sayısı ve tekrarlanan "$kisi" nesnesi. method chaining bize ilgili method'ları arka arkaya tek satırda kullanma imkanı vermektedir.
method chaining örneği:
<?php
class kisi_chain
{
private $ad;
private $yas;
public function __construct() { }
public function set_ad($ad)
{
$this->ad = $ad;
return $this;
}
public function set_yas($yas)
{
$this->yas = $yas;
return $this;
}
public function goster()
{
echo 'Merhaba benim adım ' . $this->ad . '. ' . $this->yas . ' yaşındayım';
}
}
$kisi = new kisi_chain();
$kisi->set_ad('Emrah')->set_yas('23')->goster();
?>
ekran çıktısı
Merhaba benim adım Emrah. 23 yaşındayım
farkedeceğiniz üzere class'ımızın üzerinde yaptığımız değişiklik method'ların içinde yer alan "$this" nesnesini return ile döndürmek oldu.
return $this;