PHP Method Chaining

Tue, 28 Dec 2010

Hôm nay chúng ta sẽ tìm hiểu qua về một cách viết gặp rất nhiều khi sử dụng các PHP framework đó chính là method chaining mình tạm dịch là “chuỗi phương thức”. Đây là một kỹ thuật được áp dụng khá phổ biến trong các ngôn ngữ lập trình không riêng gì PHP. Nó tiết kiệm khá nhiều thời gian cho lập trình viên trong các thao tác gọi hàm và khai báo lại biến nhận kết quả.

$person->setName("Kevin")->setAge(18)->sayHello();

Đoạn code trên sử dụng kỹ thuật method chaining viết ngắn ngọn hơn so với cách viết thông thường dưới đây

$person->setName("Kevin");
$person->setAge(18);
$person->sayHello();

Giờ thì chúng ta sẽ xây dựng một class để xem dụng kỹ thuật trên sẽ được áp dụng như thế nào nhé

class Person {
    private $name = "";
    private $age = "";

    public function setName($name = ""){
      $this->name = $name;
    }

    public function setAge($age = 18) {
      $this->age = $age;
    }

    public function sayHello() {
      echo "Hello, I am " . $this->name . ",  " . $this->age. " years old.";
    }
}

Với một class như thế này thì chúng ta không thể nào sử dụng method chaining được. Mấu chốt là nằm ở chỗ sau khi gọi xong các hàm thực thi chúng ta sẽ trả về biến $this. Ở đây được hiểu như là một context của lớp (ở đây được hiểu là class Person) và như thế chúng ta có thể tiếp tục gọi được đến các hàm khác bên trong lớp. Do đó class Person sẽ được viết lại như sau:

class Person {
    private $name = "";
    private $age = "";

    public function setName($name = ""){
      $this->name = $name;
      return $this; // Quan trọng nhất là dòng nằm ở đây
    }

    public function setAge($age = 18) {
      $this->age = $age;
      return $this; // Quan trọng nhất là dòng nằm ở đây
    }

    public function sayHello() {
      echo "Hello, I am " . $this->name . ",  " . $this->age. " years old.";
    }
}

Giờ thì chúng ta có thể gọi “chuỗi phương thức” một cách dễ dàng

$person = new Person();
$person->setName("Kevin")->setAge(18)->sayHello();
Loading...