Trong bài này, chúng ta sẽ tìm hiểu về Trait trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
1. Trait trong PHP là gì?
PHP chỉ hỗ trợ đơn kế thừa (single inheritance). Tức là một lớp con (child class) chỉ có thể kế thừa từ một lớp cha (parent class). Nếu một lớp (class) cần kế thừa từ nhiều lớp cha thì phải làm sao? Trait trong PHP giúp giải quyết vấn đề này.
Trait có những phương thức bình thường và những phương thức abstract. Những phương thức này có thể có bất kỳ access modifier nào (public, private hoặc protected). Trong Trait cũng có thể có các thuộc tính (properties). Những thuộc tính và phương thức của Trait có thể được sử dụng trong nhiều lớp (class).
Trait trong PHP được khai báo với từ khóa trait.
<?php
trait TraitName {
//properties
//methods
}
?>
Để sử dụng một Trait trong một lớp, chúng ta sử dụng từ khóa use:
<?php
trait TraitName {
//properties
//methods
}
class MyClass {
use TraitName;
}
?>
Ví dụ sử dụng Trait cho lớp Welcome như bên dưới:
<?php
trait message1 {
public $var1;
public function msg1() {
$this->var1 = 9999;
echo "Welcome to gochocit.com. ";
}
}
class Welcome {
//using trait in Welcome class
use message1;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
echo $obj->var1;
?>
Kết quả
Welcome to gochocit.com.
9999
Trong ví dụ trên, chúng ta khai báo Trait message1
. Lớp Welcome sử dụng Trait này. Do đó, lớp Welcome sẽ có các thuộc tính và phương thức của Trait message1
.
2. Đa kế thừa (multi inheritance) sử dụng Trait trong PHP
Trong PHP, một lớp có thể sử dụng nhiều Trait. Lúc này tính đa kế thừa (multi inheritance) được thể hiện.
<?php
trait message1 {
public function msg1() {
echo "Welcome to gochocit.com. ";
}
}
trait message2 {
public function msg2() {
echo "Very happy to see you visiting gochocit.com. ";
}
}
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();
?>
Kết quả
Welcome to gochocit.com.
Welcome to gochocit.com.
Very happy to see you visiting gochocit.com.
Trong ví dụ trên, chúng ta khai báo 2 Trait message1
và message2
. Sau đó, chúng ta tạo ra 2 class Welcome và Welcome2. Lớp Welcome sử dụng Trait message1
. Lớp Welcome2 sử dụng cả 2 Trait message1
và message2
.