PHP method zincirleme(method chaining) oluşturulan sınıfın methodlarının zincir gibi ardı ardına kullanılabilmesidir. OOP bize sağladığı güzelliklerden birisidir. Method zincirleme kullandığınız zaman sınıfın erişmek istediğiniz tüm methodlarını tek bir satırda kullanabilirsiniz.
İçindekiler Tablosu
PHP Method Zincirleme Kullanım Örneği
Bir sınıfın methodlarında zincirleme yöntemini kullandığınız da aşağıdaki gibi kullanılabilecektir. Aşağıdaki örnekte $class isimli sınıftan method1(), method2() ve method3() isimli methodlar çağırılmıştır.
$class->method1()->method2()->method3();
Method Zincirleme Olmadan Kullanım Örneği
Sınıf için method zincirleme kullanmadığınız durumlarda yukarıda belirttiğim method1(), method2() ve method3() kullanımı aşağıdaki gibi olacaktır.
$class->method1();
$class->method2();
$class->method3();
PHP Method Zincirleme Nasıl Tanımlanır
Method zincirleme özelliğini kullanabilmek için dikkat etmeniz gereken ipucu zincirleme olarak kullanılacak her methodun yapması gereken işlemleri yaptıktan sonra return $this; ile tekrardan kendi sınıfını return etmesidir. Aşağıdaki person sınıfında tanımlı olan method1() isimli method işlemleri yaptıktan sonra return $this; ile kendi sınıfını return ettiği görülmektedir.
class person
{
public function method1()
{
//İşlemler
return $this;
}
}
PHP Method Zincirleme Örneği
class Person
{
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $surname;
/**
* @var string
*/
private $age;
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @param string $name
*
* @return $this
*/
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return string
*/
public function getSurname(): string
{
return $this->surname;
}
/**
* @param string $surname
*
* @return $this
*/
public function setSurname(string $surname): self
{
$this->surname = $surname;
return $this;
}
/**
* @return string
*/
public function getAge(): string
{
return $this->age;
}
/**
* @param string $age
*
* @return $this
*/
public function setAge(string $age): self
{
$this->age = $age;
return $this;
}
/**
* @return string
*/
public function show(): string
{
return sprintf('Adı: %s, Soyadı: %s, Yaşı: %s', $this->getName(), $this->getSurname(), $this->getAge());
}
}
Yukarıdaki örnekte person adında bir sınıf örneği oluşturulmuştur. Ayrıca bu sınıfın phpDoc yorumları ve tür dayatmaları tanımlanmıştır. Sınıfta toplam 7 method oluşturulmuştur. Dikkat ederseniz 3 tane get ile başlayan 3 tane de set ile başlayan method ve 1 tanede show methodu bulunmaktadır. Bu 7 methodun tamamı zincirleme methodunda kullanılamaz çünkü yukarıda belirttiğim gibi zincirleme methodda kullanılacak olan methodların return $this ile kendi sınıfını return etmesi gerekmektedir. Bu sınıf örneği için de sadece setName(), setSurname() ve setAge() methodları zincirleme method olarak kullanılabilir.
Yukarıdaki sınıfın zincirleme methodu ile kullanımı aşağıdaki gibi olacaktır.
$person = new Person();
$person->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20);
//Aletnatif Kullanım
$person = (new Person())->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20);
Yukarıdaki kullanım zincirleme yöntemi için bahsettiğimiz return $this özelliğini içeren bütün methodları içermektedir. Ama buraya son bir method daha ekleyerek sonuç alacağız. Bunun için show() methodunu çağıracağız. Burada dikkat etmeniz gereken ipucu show() methodunun zincirleme methodlarının en sonunda çağırılması gerektiğidir. Çünkü show() methodu return $this özelliğine sahip olmadığı için method için de tanımlanan işlemi yaptıktan sonra değeri return edecektir ve kendinden sonra başka bir method çağırılmasına izin vermeyecektir.
echo $person->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20)->show();
// Adı: Tolga, Soyadı: ÇIBIKÇI, Yaşı: 20
Bu sınıfta method zincirleme işleminin sonunda get ile başlayan diğer methodlardan birisini de çağıra bilirisiniz. Bu durumda çağırmış olduğunuz methoda göre sonuç gösterilecektir.
echo $person->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20)->getName();
// Tolga
echo $person->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20)->getSurname();
// ÇIBIKÇI
echo $person->setName('Tolga')->setSurname('ÇIBIKÇI')->setAge(20)->getAge();
// 20
Method Zincirleme için farklı bir örnek incelemek için wikipedia’da bulunan Fluent Interface makalesini inceleyebilirsiniz.
PHP Method Zincirlemenin Faydaları
- Kodun okunabilirliğini arttırır
- Kod karmaşıklığını azaltır