PHP – Fluent Interface Design Pattern

Fluent Interface sözcük öbeğinin aşağı yukarı Türkçe karşılığı akıcı arabirim veya akıcı arayüz anlamlarına geliyor.

Fluent Interface bir Object Oriented Programming (OOP) design pattern (tasarım deseni)’dır.

Fluent Interface bazı yerlerde metod zincirleme olarak da geçebilir.

Peki bu design pattern’ın yapısı nasıldır?

Şimdi basit bir Class yazalım.

class Ogrenci{
    
    public function setAd($ad){
        $this->_ad = $ad;
    }
    
    public function setSoyad($soyad){
        $this->_soyad = $soyad;
    }
    
    public function setDogum($DogumTarihi){
        $this->_DogumTarihi = $DogumTarihi;
    }
    
    public function getOgrenci(){
        return $this->_ad . " " . $this->_soyad . " " . $this->_DogumTarihi;
    }
}

Bu Class’a yapılacak olan Set ve Get işlemi şöyle olabilir:

$ornek = new Ogrenci;
$ornek->setAd('Ali');
$ornek->setSoyad('Demir');
$ornek->setDogum('2002');
echo $ornek->getOgrenci();

Gördüğünüz gibi her set işleminde $ornek değişkenini yazıyoruz. Ama Martin Fowler ve Eric Evans isimli iki abimiz bunları daha okunabilir şekilde yazabiliriz demişler. Kendilerine bu yöntem için bu yazı aracılığı ile de teşekkürler.

Yani şöyle, yukarıdaki Class’ı şöyle düzenliyoruz:

class Ogrenci{
    
    public function setAd($ad){
        $this->_ad = $ad;
        return $this;
    }
    
    public function setSoyad($soyad){
        $this->_soyad = $soyad;
        return $this;
    }
    
    public function setDogum($DogumTarihi){
        $this->_DogumTarihi = $DogumTarihi;
        return $this;
    }
    
    public function getOgrenci(){
        return $this->_ad . " " . $this->_soyad . " " . $this->_DogumTarihi;
    }
}

Yeni Class’da ki set işlemlerine return $this; eklendi.

Artık set işlemlerini şöyle yapabiliriz:

$ornek = new Ogrenci;

$ornek->setAd('Ali')
      ->setSoyad('Demir')
      ->setDogum('2002');

echo $ornek->getOgrenci();
 
12 Kudos
Don't move
  1. hocam buradaki “return $this” ne döndürüyor ne anlama geliyor tam anlamadım?

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>