Traits trong PHP
Traits trong PHP là gì?
PHP chỉ hỗ trợ đơn kế thừa: có nghĩa là một lớp con chỉ có thể kế thừa từ một cha duy nhất.
Vậy, điều gì sẽ xảy ra nếu một lớp cần kế thừa nhiều hành vi? Traits trong PHP sẽ giải quyết vấn đề này.
Traits (đặc điểm) trong PHP được sử dụng để khai báo các phương thức có thể được sử dụng trong nhiều lớp.
Traits trong PHP có thể có các phương thức và phương thức trừu tượng để có thể sử dụng trong nhiều lớp và các phương thức có thể có bất kỳ chỉ thị truy cập nào (public, private hoặc protected).
Traits trong PHP được khai báo với từ khóa trait
như ví dụ sau:
<?php
trait TraitName {
// some code...
}
?>
Để sử dụng traits trong một lớp, chúng ta sẽ sử dụng từ khóa use
như ví dụ sau:
<?php
class MyClass {
use TraitName;
}
?>
Ví dụ dưới đây minh họa sử dụng traits trong PHP:
<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}
class Welcome {
use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
Đây là kết quả:
OOP is fun!
Ở đây, chúng tôi khai báo một traits tên là message1. Sau đó, chúng tôi tạo ra một lớp tên là Welcome.
Lớp Welcome sử dụng traits message1 do đó tất cả các phương thức trong message1 sẽ có sẵn trong lớp này.
Nếu các lớp khác cũng cần sử dụng hàm msg1(), chỉ cần sử dụng traits message1 trong các lớp đó là xong. Điều này làm giảm sự trùng lặp của mã, bởi vì không cần phải lặp đi lặp lại một đoạn mã nào đó.
Sử dụng nhiều traits trong PHP
PHP hỗ trợ một lớp có thể sử dụng nhiều trait.
Ví dụ sau minh họa sử dụng nhiều traits trong PHP:
<?php
trait message1 {
public function msg1() {
echo "OOP is fun!";
}
}
trait message2 {
public function msg2() {
echo "OOP reduces code duplication!";
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
echo "<br>";
$obj2->msg2();
?>
Đây là kết quả:
OOP is fun!
OOP is fun!
OOP reduces code duplication!
Ở đây, chúng tôi khai báo hai traits là: message1 và message2. Sau đó, chúng tôi tạo hai lớp là: Welcome1 và Welcome2.
Lớp Welcome1 sử dụng traits message1 và lớp Welcome2 sử dụng cả hai trait là message1 và message2 (các traits được phân tách bằng dấu phẩy).
Do đó đối tượng của lớp Welcome2 có thể truy cập các phương thức được định nghĩa trong cả hai traits là message1 và message2.
Bạn có thể xem thêm các ví dụ sử dụng traits trong PHP ở bài viết sau: