PHP Method Zincirleme Nasıl Kullanılır?

Doğukan Akkaya

Öncelikle bir sınıf oluşturalım

class Database
{
  
}

Tabii ki metod zincirleme işlemi için bir sınıfa ihtiyacınız yok ancak sınıf örneği üzerinden daha net anlaşılabilir olacağını düşünüyorum.

Eğer daha önce PHP Frameworklerinin veritabanı işlemlerini incelediyseniz bir çok yerde belki de farkında olmadan zaten metod zincirleme kullandınız.

 

Örnek bir metod zincirleme

$db = new Database();
$db->select('eposta')->where('id', 1)->get('uyeler');

Yukarıda farkettiğiniz gibi Database sınıfından türetilmiş bir $db objesi üzerinde sırasıyla 'select, where, get' metodları kullanılmış. Metodlardan genelde bir sonuç döndürülür veya ekrana basılır. Burada da aynı şekilde bir döndürme işlemi yapacağız. 

 

Yukarıdaki örnek için şu şekilde bir classımız olması gerekiyor

class Database
{
  public function select($select = "*"){
      
  }
  
  public function where($column, $value){
      
  }
  
  public function get($table){
      
  }
}

Ancak bu fonksiyonları direkt olarak zincirleyip ard arda çalıştıramıyoruz. Ard arda çalıştırabilmemiz için fonksiyonlardan bir sınıf 'instance' (Türkçesi tam olarak karşılamıyor aslında bu kelimeyi, yani metoddan döndürdüğümüz şeyin içinde başka metodlar olması lazım, çağırabileceğimiz metodlar) döndürmemiz gerekiyor.

 

Metodlarda gördüğünüz $this keyword'ü döndürülüyor. $this, Database sınıfını temsil ediyor. 

select metodunda $this keyword'ü döndüğünde, geriye Database sınıfı döndüğü için ve bu class'ın içinde de where ve get gibi metodlar olduğu için tekrardan metod çağırma işlemi yapılabiliyor. Tabi bunu sıradan bir fonksiyondan, bir sınıf instance'ı döndürerek veya bir sınıftan farklı bir sınıfın instance'ını döndürerek de yapabilirsiniz.

class Database
{
  private $sql;
  private $where;
  public function select($select = "*"){
      $this->sql = "SELECT $select FROM {table} ";
      return $this;
  }
  
  public function where($column, $value){
      $this->sql .= "WHERE $column=$value";
      return $this;
  }
  
  public function get($table){
      # Sorgu içindeki {table} değerini geçilen tablo parametresi ile değiştiriyoruz.
      $this->sql = str_replace("{table}", $table, $this->sql);
      
      $veritabanindanGelenVeriler = ['id' => 1, 'isim' => 'Codethereal', 'eposta' => 'dogukan@jbm.com.tr'];
      return $veritabanindanGelenVeriler;
  }
  
  public function getSql(){ return $this->sql; }
}
$db = new Database();
$db->select('eposta')->where('id', 1)->get('uyeler');
echo $db->getSql(); // SELECT eposta FROM uyeler WHERE id=1

Bunu geliştirmek size kalmış bir şey, çok basit bir veritabanı sınıfı yazmış olduk bu sayede. Geliştirmek isterseniz yapabileceğiniz işlevler:

  • Birden fazla where zincirleme
  • or where zincirleme
  • insert,update,delete gibi işlemleri zincirleme
  • where koşulunda sadece '=' operatörü değil de '>, <' gibi operatörler ekleme
  • join işlemleri

0 Yorum

İlk yorumu sen ekle!

--}}