Hướng dẫn dùng inheritance traits trong PHP
Hôm nay mình sẽ giới thiệu một khái niệm đã được PHP giới thiệu từ PHP 5.4 trở đi. Đây là một khái niệm theo mình nghĩ là hay, và để biết nó hay như thế nào thì chúng ta cùng tìm hiểu qua bài này nhé !Trait là gì ?PHP hay Ruby đều là những ngôn ngữ hướng đối tượng chỉ hỗ trợ single inheritance(đơn kế thừa). Để khắc phục những giới hạn của đơn kế thừa trong việc sử dụng lại source code, từ PHP 5.4 trở đi PHP hỗ trợ Traits là cơ chế giúp cho lập trình viên có thể sử dụng lại các phương thức từ các class khác nhau một cách dễ dàng hơn. Một trait tương tự như là 1 class nhưng chỉ nhằm mục đích nhóm chức năng lại. Và trait không thể khởi tạo giống class và trait sinh ra để bổ sung cho kế thừa truyền thống. Thay vì phải kế thừa 1 class hay interface để sử dụng lại 1 nhóm chức năng, thì với trait bạn không cần phải kế thừa vẫn có thể sử dụng được Đọc xong khái niệm chắc còn mơ hồ lắm đúng không nào. Ok, chúng ta tìm hiểu cách sử dụng Trait qua các ví dụ sau đây nhé: Ví dụ 1: Minh họa về Trait Giả sử ta có các class sau:
Đặt vấn đề : Nếu ta muốn sử dụng lại method listUsers trong class Database cho class Users hoặc class Report thì làm thế nào ? Trong trường hợp này thì chắc chắn các bạn sẽ nghĩ đến từ khóa
Nếu trường hợp nào cũng viết thế này được thì Trait dùng chỗ nào cho hợp lý !!?? À, đây các bạn, với vấn đề mà mình đã đặt ra ngay từ đầu thì mình có thể dùng Trait để xử lý, nhanh, gọn, lẹ, đỡ tốn tài nguyên. Vậy code thế nào, mình xin giới thiệu đây ạ.
*** Sử dụng nhiều trait trong 1 class ?***
Đặt vấn đề : Nếu ta muốn sử dụng lại method listUsers trong trait Database và sử dụng method authorize trong trait Authenticate cho class Users thì làm thế nào ? Các bạn không phải lo lắng về điều đó, PHP hỗ trợ hết cho các bạn. Hãy theo dõi ví dụ dưới đây để hiểu rõ hơn về trường hợp này nào !!
Đặt vấn đề :
*** Trait lồng trait ***Đặt vấn đề :
Ngoài ra còn một số vấn đề nữa liên quan tới trait như:
Những vấn đề này trong bài viết kế tiếp mình sẽ giới thiệu, đồng thời mình cũng sẽ giới thiệu thêm các vấn đề như:
|