Hướng dẫn dùng abstract traits trong PHP
Lời mở đầuXin chào các bạn 😄 trong bài viết lần này chúng ta cùng nhau tìm hiểu về Traits trong PHP, và cách sử dụng Traits nha! Show Giới thiệu về TraitsPHP là một ngôn ngữ kế thừa đơn, một lớp con chỉ có thể kế thừa từ một lớp cha duy nhất. Điều này có thể đặt ra vấn đề về việc sử dụng lại mã, nếu lớp cần kế thừa nhiều phương thức. Từ PHP 5.4 trở đi, PHP đã hỗ trợ Traits để khắc phục những giới hạn của đơn kế thừa. Traits có thể hiểu là nơi tập hợp một nhóm phương thức cho phép lập trình viên tận dụng khả năng tái sử dụng lại code một cách đơn giản hơn là kế thừa như trước. Vì sao nên sử dụng Traits
Nhược điểm của Traits
Cách sử dụng TraitsTạo một Traits thật dễ dàng
Tiếp theo là để sử dụng Trait trong một class, ta sử dụng từ khóa use như ví dụ sau :
Trong đó:
Thật dễ dàng phải không, nhưng điều gì sẽ xảy ra khi một class tồn tại phương thức có cùng tên với một phương thức được bao gồm trong Traits? Hãy cùng xem ví dụ dưới đây
Và chúng ta sẽ nhận được kết quả
Vậy điều gì xảy ra nếu class ClassName kế thừa phương thức log() từ một class cha khác
Điều nay có nghĩa là phương thức log của class Base đã bị ghi đè với phương thức log của Traits. Khi sử dụng Traits trong class bạn nên chú ý rằng
Sử dụng nhiều Traits trong classBên trong một class, chúng ta có thể sử dụng nhiều Traits , tất cả những gì chúng ta phải làm là sử dụng từ khóa use và giữa các TraitsName được phân tách bằng dấu phẩy:
Ưu tiên phương thức trong traitsGiả sử các bạn có 2 TraitA và TraitB, và trong cả 2 traits này đều có chung một method tên là methodC():
Tiếp theo là định nghĩa ClassA use hai Traits trên
Để xử lý tình huống trên, chúng ta sử dụng insteadof để xét độ ưu tiên cho phương thức muốn sử dụng:
Hoặc có thể override lại methodC() ở trong ClassA:
Traits lồng nhauBạn có thể dễ dàng sử dụng Traits lồng nhau
Sự khác biệt giữa Traits và Abstract ClassTraits khác với Abstract Class vì nó không dựa trên sự kế thừa.Class có thể sử dụng nhiều Traits nhưng chỉ kế thừa 1 Abstract Class. Abstract Class được hiểu là class cha cho các class con có cùng bản chất kế thừa, còn việc sử dụng Traits giống như là bạn copy lại những đoạn code có cùng một cách xử lý vào trong bất cứ class bạn cần dùng vậy. Sự khác biệt giữa Traits và InterfaceCó thể nói Traits và Interface khá giống nhau về tính chất sử dụng. Cả hai đều không thể sử dụng nếu không có một class được implements cụ thể. Tuy nhiên, Interface được mô tả như là một bản thiết kế chung cho các class, Interface chỉ khai báo các phương thức cho các class implements sẽ phải override tất cả các phương thức đó, mỗi một class triển khai lại có các cách triển khai khác nhau. Trong khi Traits là nơi triển khai những đoạn code dùng chung. Kết luậnTraits là một trong những tính năng mạnh mẽ được giới thiệu trong PHP 5.4. Traits cho phép sử dụng lại các đoạn mã theo chiều ngang trên nhiều lớp mà không phải nằm trong cùng một hệ thống phân cấp thừa kế. Trong bài viết này, mình đã giới thiệu xong đến mọi người kiến thức cơ bản của Traits trong PHP rồi, bài viết còn nhiều thiếu sót rất mong được các bạn góp ý thêm. Tài liệu tham khảohttps://culttt.com/2014/06/25/php-traits/ https://www.geeksforgeeks.org/traits-vs-interfaces-in-php/ https://medium.com/oceanize-geeks/traits-in-php-proper-way-of-implementation-afc4947cd6e8 |