07/09/2018, 10:38

Trait trong PHP: Tại Sao Dùng và Dùng Như Thế Nào?

Trait được giới thiệu trong PHP phiên bản 5.4.0 và được định nghĩa là một cơ chế cho phép lập trình viên tận dụng khả năng tái sử dụng lại code (code reusability) khi lập trình với ngôn ngữ chỉ cho phép thừa kế từ một class duy nhất (hay còn gọi là single inheritance) như PHP. Trait thực ra cực ...

Trait được giới thiệu trong PHP phiên bản 5.4.0 và được định nghĩa là một cơ chế cho phép lập trình viên tận dụng khả năng tái sử dụng lại code (code reusability) khi lập trình với ngôn ngữ chỉ cho phép thừa kế từ một class duy nhất (hay còn gọi là single inheritance) như PHP.

Trait thực ra cực kỳ đơn giản, để chứng minh cho điều tôi mới nói thì chúng ta sẽ cùng tham khảo một số ví dụ sau đây:

Ví Dụ Về Trait

Giả sử bạn có một model class là Post như sau:

class Post extends Model {
    public function shareOnFacebook() {
    echo "Chia sẻ bài viết lên Facebook";
    }
}

Và đồng thời bạn cũng có một model class khác là Comment như sau:

class Post extends Model {
    public function shareOnFacebook() {
    echo "Chia sẻ bài viết lên Facebook";
    }
}

Nếu để ý thì bạn có thể thấy method shareOnFacebook được sử dụng như nhau trong cả 2 class Post và Comment.

Sử dụng Trait chúng ta có thể tránh được việc duplicate code như ở trên như sau:

trait FacebookSharing {
    public function share() {
    echo "Chia sẻ bài viết lên Facebook";
    }
}

Lúc này 2 class Post và Comment có thể được viết lại đơn giản hơn như sau:

Class Post:

class Post extends Model {
    use FacebookSharing;
}

Và class Comment:

class Post extends Model {
    use FacebookSharing;
}

Tại Sao Sử Dụng Trait

Sau khi đã tìm hiểu ví dụ về cách sử dụng Trait ở trên thì bạn có đang tự đặt ra câu hỏi tại sao cần sử dụng Trait? Nếu có thì thật là tuyệt vời vì bạn thể hiện rằng mình khoong chỉ dừng lại ở mức độ là một developer chỉ biết sử dụng cái sẵn có! Và nếu như bạn đã có câu trả lời (hay chưa thể tìm ra ngay lúc này) thì cũng không sao, bạn có thể tham khảo tiếp nội dung của phần này.

Đầu tiên bạn thấy cả hai class Post và Comment ở trên đã thừa kế từ class Model điều này thường thấy trong các framework PHP hiện đại ngày nay mặc dù bạn có thể thấy teen class được kế thừa khác nhau (như AppModel trong CakePHP, Eloquent trong Laravel hay CModel trong Yii... chẳng hạn). Và điều này khiến cả 2 class không thể thừa kế từ bất kỳ một class nào khác nữa do PHP chỉ cho phép mỗi class thừa kế từ tối đa là 1 class khác.

Lúc này bạn có thể thêm tính năng share lên Facebook bằng cách chèn cùng một method với code giống nhau vào cả hai class như cách làm đầu tiên. Tuy nhiên hạn chế của cách làm này là code của bạn sẽ bị trùng và trong trường hợp Facebook cập nhật API chia sẻ link bài viết thì bạn sẽ cần sửa lại code trong cả hai class.

Ngược lại với việc sử dụng Trait chúng ta sẽ gom được những đoạn code trùng lặp trên ra một nơi và nếu cần thay đổi bạn chỉ cần sửa đổi ở một file duy nhất.

Kết Luận

Trong bài viết ngắn gọn này tôi tập trung vào việc giới thiệu tới bạn các sử dụng Trait trong PHP và tại sao cần sử dụng Trait. Hy vọng bạn đã giải đáp được các thắc mắc của một người mới bắt đầu tiếp cận với tính năng mới của PHP 5.4.0 này. Ngoài ra, để có thể hiểu chi tiết sâu hơn về Trait trong PHP bạn có thể tìm hiểu trên trang document chính thức của PHP qua địa chỉ http://php.net/manual/en/language.oop5.traits.php.

Lưu ý nhỏ: Một số tài liệu tiếng Anh trên internet sử dụng từ Traits số nhiều (thay vì Trait số ít). Và một số tài liệu trên internet viết bằng tiếng Việt chỉ sử dụng Traits số nhiều một số khác chỉ sử dụng Trait số ít một số thì lẫn lộn cả hai. Theo quan điểm của tác giả thì ở đây nếu sử dụng tiếng Việt chúng ta có thể sử dụng Trait số ít thay vì số nhiều.

0