Sering kali kita melihat baris kode OOP di PHP seperti pada gambar disamping. Itu dinamakan Method Chaining yang ditujukan agar kita bisa memanggil dan menggunakan multiple Method Call (pemanggilan method) dalam satu baris kode. Masing-masing method harus me-return Object. 


Jika sudah familiar dengan PHP framework, kita sering lihat bahwa Query mereka umumnya menggunakan Method Chaining 

$this->db->select(...)->from(...)->where(...)->get();
atau 

DB::table(..)->leftJoin(...)->leftJoin(...)->where(...)->paginate(...);

Ini jelas mempermudah programmer/user untuk membuat Query ke database dibanding dengan menulis Query secara utuh (manual).

Mari kita buat contoh : 

class User{
    
    protected $user_detail = array();
    
    public function setUser($name,$sex,$age){
        
        $this->user_detail = array(
            
            'name' => $name,
            'sex'  => $sex,
            'age'  => $age
        
        );
        
        return $this; //hrus return Object
    }
    
    public function getUser(){
    
        //ambil user dri DB
    }
    private function _query($sql,$data){
        
        //query ke DB disini....
        return true;//misal success insert
    }
    public function insertUser(){
        
        //misal pura-puranya insert ke DB kek gini
        $insert = $this->_query("INSERT INTO t_user",$this->user_detail);
        if(!$insert)
            return false;
        
        return true;        
    }
   
}


$obj = new User();
$user = $obj->setUser("Ganjar","male",34)->insertUser();
if($user)
    echo "Insert Sukses";
else
    echo "Insert gagal";

Jika ingin method Chaining maka method nya harus me-return Object

public function example(){
    //......
     return $this;
}

Pada kode diatas perhatikan bahwa method setUser() mereturn Object sehingga saat digunakan kita bisa kontruksi kode sperti ini :

$user = $obj->setUser("Ganjar","male",34)->insertUser();

Method  insertUser()   tidak me-return Object ini karena kita sudah set bahwa method tersebut adalah proses terakhir dari rangkaian method sebelumnya. Seperti pada Framework Codeiginter

$this->db->query(...)->result();
$this->db->query(...)->result_array();

method  result();   dan result_array();  adalah method terakhir dalam rangkain method sebelumnya.  

Contoh lain

 
class Person {
 
  protected $name;
  protected $age;
 
  public function setName($name) {
    $this->name = $name;
    return $this; //return Object
  }
 
  public function setAge($age) {
    $this->age = $age;
    return $this; //return Object
  }
 
  public function __toString() {
    return "Hello, my name is ".$this->name." and I am ".$this->age." years old.";
  }
}
 
$person = new Person;
echo $person->setName("Ganjar")->setAge(25), "
"; echo $person->setName("Momon")->setAge(22), "
";

Untuk contoh Method Chaining Active Record (Query ke Database). bisa di download disini  
panjelasannya disini