[TRAIT] Traits trong PHP (ok)
https://toidicode.com/traits-trong-php-108.html
C:\xampp\htdocs\php\a.php
<?php
trait SetGetName {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}C:\xampp\htdocs\php\c.php
<?php
namespace SetGetAge;
trait SetGetAge {
public function setAge($age) {
$this->age = $age;
}
public function getAge() {
return $this->age;
}
}C:\xampp\htdocs\php\b.php
Bài 12: Traits trong PHP
PHP là ngôn ngữ chỉ hỗ trợ đơn kế thừa trong hướng đối tượng thế nên bạn muốn sử dụng lại source code một cách nhiều lần là rất khó khăn. Và để khắc phục điều đó thì từ PHP 5.4 trở lên, PHP đã hỗ trợ chúng ta Traits. Một khái niệm được dùng rất là nhiều trong các framework PHP hiện nay, điển hình là Laravel.
Vì Kiến thức xoay quanh Traits khá là dài nên mình sẽ chia làm 2 phần:
Traits trong PHP.
Mục Lục
1, Traits là gì?
- Traits là một module giúp cho chúng ta có thể sử dụng lại các phương thức được khai báo trong trait vào các class khác nhau một cách đơn giản hơn là kế thừa như trước.
-Các đặc điểm của Traits:
Traits có chức năng gom lại các phương thức và thuộc tính mà chúng ta muốn sử dụng lại nhiều lần.
Traits như một abstract class ( đều không thể khởi tạo được) nhưng không hoàn toàn giống nhau.
Các phương thức trong Traits có thể bị override lại trong class sử dụng nó.
-Ưu điểm của Traits:
Giảm việc lặp code đáp ứng được nguyên tắc(DRY - Don't Repeat Yoursefl).
Khắc phục được điểm yếu đơn kế thừa của PHP.
-Nhược điểm của Traits: Nhược điểm duy nhất mà mình thấy được khi sử dụng traits đó là sẽ gây khó khăn có chúng ta đọc được các phương thức từ một class có sử dụng traits
2, Khai báo Traits.
-Để khai báo một trait trong PHP các bạn sử dụng cú pháp:
Trong đó: Name là tên của trait các bạn muốn đặt.
VD1: Khai báo một trait SetGetName có hai phương thức setName() và getName().
-Và với Trait bạn cũng hoàn toàn sử dụng được namespace nhé.
VD2: Khai báo một trait SetGetAge có hai phương thức setAge() và getAge() và namespace là SetGetAge luôn.
4, Sử dụng Trait trong class.
-Để sử dụng trait trong class thì các bạn chỉ cần sử dụng cú pháp:
Trong đó:
ClassName là class mà bạn muốn sử dụng trait.
TraitName là tên traits mà bạn muốn sử dụng.
VD: Mình sẽ gọi 2 trait ở trên vào trong class ConNguoi và đồng thời khởi tạo luôn.
-Hoặc bạn cũng có thể gọi namespace của trait và sử dụng nhiều trait bằng use như sau:
5, Trait lồng.
-Cũng như các cấu trúc điều khiển hay vòng lặp thì bạn cũng có thể sử dụng trait lồng nhau.
VD:
-Lúc này khi bạn gọi trait B là bạn cũng có thể sử dụng đầy đủ chức năng của trait A.
6, Ưu tiên phương thức trong traits.
-Giả sử như bạn có hai trait như sau:
-Bây giờ nếu như bạn gọi 2 trait trên vào trong một class thì lập tức chương trình lỗi ngay.
VD:
-Giờ đây sẽ có 2 giải pháp để sử lỗi trên như sau:
Cách 1: Là bạn sẽ phải override lại phương thức trùng tên đó ở trong class sử dụng.
VD:
Cách 2: Xử dụng insteadof để xét độ ưu tiên cho phương thức bạn muốn sử dụng.
VD:
7, Lời kết.
- Như vậy phần 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, phần sau chúng ta sẽ tìm hiểu tiếp các vấn đề về thành phần tĩnh và phương thức trừu tượng xoay quanh Traits.
Last updated
Was this helpful?