wiki

View on GitHub

3.10 Medtho Chaining

Chuỗi phương thức (method chaining) là một cách viết hầu hết các framework hiện nay đang sử dụng, hôm nay mình sẽ hướng dẫn các bạn cách để tạo ra các phương thức như thế này. Và một điều bất ngờ là việc này vô cùng, vô cùng đơn giản. Không nói quá nhá, chúng ta chỉ cần nắm được một số khái niệm cơ bản là đủ để có thể xây dựng được các phương thức như thế này rồi.

Trước tiên chúng ta sẽ cùng nhau tìm hiểu đến phương thức __call(), đây là một trong các phương thức ma thuật (magic method) của PHP, phương thức này là cái cốt lõi để chúng ta xây dựng nên chuỗi phương thức (method chaining). Vậy nó là gì và nó hoạt động như thế nào? Nói một cách đơn giản và dễ hiểu thì nó sẽ được định nghĩa một cách ngắn gọn như thế này

Cách viết thông thường:

<?php
    db = new Database();
    $db->select('username'); 
    $db->from('users'); 
    $db->where('user_id = 1'); 
    $db->order_by('id DESC'); 
    $db->excute();
?>

Cách viết theo chuỗi phương thức:

<?php
    $db = new Database(); 
    
    $db->select('username') 
    ->from('users')->where('user_id = 1')->order_by('id DESC') 
    ->execute();
?>

Bạn thích cách viết nào hơn?

Cách xây dựng

<?php
    class Database{ 
        public $select; 
        public $from; 
        public $where; 
        public $order_by; 
    
        public function __call($name, $arguments){ 
            $this->$name = $arguments[0]; 
            return $this; 
        } 
    
        public function execute(){ 
            echo 'SELECT ' . $this->select 
            . ' FROM ' . $this->from 
            . ' WHERE ' . $this->where 
            . ' ORDER BY ' . $this->order_by; 
        } 
    }
?>