- Messages
- 585
- Points
- 10
- Language
- Tiếng Việt
Các bạn đã biết PHP là ngôn ngữ lập trình đơn kế thừa, không cho phép kế thừa nhiều lớp khác, đây là một hạn chế không nhỏ khi lập trình ứng dụng web. Tuy nhiên, từ phiên bản PHP 5.4 trở đi thì PHP đã bổ sung thêm thành phần gọi là Trait để giúp giải quyết vấn đề đa kế thừa, giúp các lớp có thể kế thừa sử dụng các phương thức ở các Trait khác.
Trait cũng tương tự như một lớp abstract, cũng được định nghĩa với các phương thức thực hiện những nhiệm vụ nào đó và các phương thức này có thể được sử dụng ở các lớp khác có sử dụng Trait được khai báo, một điều quan trọng nữa là Trait không thể được khởi tạo. Với khả năng này của Trait, các bạn có thể thấy nó khá giống với đa kế thừa, giúp giải quyết được nhiều vấn đề liên quan mà đơn kế thừa không giải quyết được. Để sử dụng Trait hiệu quả, các bạn nên định nghĩa các phương thức thực hiện cùng một nhóm chức năng vào một Trait, điều này giúp cho việc quản lý Trait hiệu quả hơn.
Để định nghĩa một Trait, các bạn có thể thực hiện theo mẫu sau:
Ví dụ tôi định nghĩa trait User như sau:
Bây giờ, ở một lớp nào đó các bạn có thể sử dụng trait User như ví dụ sau:
Các bạn có thể sử dụng nhiều Trait trong lớp như sau:
Các bạn có thể tìm hiểu thêm về Trait trong PHP tại địa chỉ https://www.php.net/manual/en/language.oop5.traits.php.
Trait cũng tương tự như một lớp abstract, cũng được định nghĩa với các phương thức thực hiện những nhiệm vụ nào đó và các phương thức này có thể được sử dụng ở các lớp khác có sử dụng Trait được khai báo, một điều quan trọng nữa là Trait không thể được khởi tạo. Với khả năng này của Trait, các bạn có thể thấy nó khá giống với đa kế thừa, giúp giải quyết được nhiều vấn đề liên quan mà đơn kế thừa không giải quyết được. Để sử dụng Trait hiệu quả, các bạn nên định nghĩa các phương thức thực hiện cùng một nhóm chức năng vào một Trait, điều này giúp cho việc quản lý Trait hiệu quả hơn.
Để định nghĩa một Trait, các bạn có thể thực hiện theo mẫu sau:
Code:
trait Tên_trait
{}
PHP:
trait User
{
public function getUsername()
{
return 'filiallion';
}
}
PHP:
class Member
{
use User;
public function getAccount()
{
return $this->getUsername();
}
}
PHP:
use User, UserProfile;