Ứng dụng Method Chaining trong lập trình PHP

Method Chainning là kỹ thuật cho phép người lập trình triệu gọi cùng lúc nhiều phương thức, nó giúp tạo nhịp cầu giúp cô đọng mã lệnh và dễ dàng tương tác mở rộng trong ứng dụng.

Ở ví dụ sau, nếu theo tư duy thông thường thì class Student nên để kế thừa class Person. Ở đây chúng ta có thể áp dụng Method Chaining làm cho lớp Student được linh hoạt và uyển chuyển hơn.

Sử dụng Method Chaining giữa 2 lớp thay vì viết kế thừa

<?php
class Person{
    public $name;
    public $age;
    public function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
    public function getName(){
        return $this->name;
    }
    public function getAge(){
        return $this->age;
    }
 
}
 
class Student{
    public $student;
    public function setStudent($name,$age){
        $this->student=new Person($name,$age);
    }
    public function getStudent(){
        return $this->student;
    }
}
 
$student=new Student;
$student->setStudent('Johnny', 34);
echo 'Xin chào ' .  $student->getStudent()->getName();
echo '<br>';
echo 'Bạn năm nay ' , $student->getStudent()->getAge() . ' tuổi phải không';
?>

Trong lớp Student, có một thuộc tính $student có kiểu là Person. Với hai phương thức setStudent và getStudent để gán và trả về kiểu kiểu dữ liệu cho đối tượng Student.

Phương thức getStudent() trả về kiểu Person, mà kiểu Person chứa các thuộc tính và phương thức liên quan đến Person, nên chúng ta có thể lấy tên của sinh viên bất kỳ bằng cách gọi liên tiếp hai phương thức của hai lớp: $student->getStudent()->getName();

Sử dụng Method Chaining để thao tác cơ sở dữ liệu linh hoạt hơn

<?php
Class Database extends Mysqli{
    protected $result;
    public function __construct(){
        parent::__construct('localhost','root','','demo_method_chaining');
    }
    public function get($table){
        $this->result=$this->query("select * from $table");
        return $this;
    }
    public function fetchAll(){
        $data=array();
        while($row=$this->result->fetch_assoc()){
            $data[]=$row;
        }
        return $data;
    }
}
$user=new Database;
$data=$user->get('users')->fetchAll();
echo "<pre>";
print_r($data);
echo "</pre>";
?>

Phương thức fetchAll() được gọi liền sau phương thức get() bởi vì phương thức get() trả về kiểu đối tượng $this chứa thuộc tính $result, nó là đầu vào của phương thức fetchAll().

Sử dụng Method Chaining để hiển thị nhiều thông báo

<?php
class Developer{
    public function readBlog(){
        echo 'Lập trình viên nên đọc Blog hàng ngày.<br>';
        return $this;
    }
 
    public function writeBlog(){
        echo 'Viết Blog là cách trải nghiệm rất thú vị.<br>';
        echo 'Lúc bạn chia sẻ kiến thức cũng chính là lúc bạn học lại chính mình một cách sâu sắc hơn.<br>';
        return $this;
    }
 
    public function doOthers(){
        echo 'Từ coder tới developer thì lập trình viên cần biết và làm những gì?
        Tóm lại là phải hành động như thế nào.';
        return $this;
    }
}
$developer = new Developer;
$developer->writeBlog()->readBlog()->doOthers();
?>

Để lại một trả lời

Hãy trở thành người đầu tiên bình luận!

Thông báo cho
avatar
wpDiscuz