Trait là gì? Cách sử dụng Trait trong PHP

Đây là bài 35/39 bài của series môn học Lập trình Web PHP

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 message1message2. Sau đó, chúng ta tạo ra 2 class WelcomeWelcome2. Lớp Welcome sử dụng Trait message1.  Lớp Welcome2 sử dụng cả 2 Trait message1message2.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Lớp trừu tượng (abstract class) và interface trong PHPPhương thức tĩnh (static method) và thuộc tính tĩnh (static property) trong PHP >>
Chia sẻ trên mạng xã hội:

Tác giả Vinh Lê

Vinh Lê hiện đang là biên tập viên tại Góc Học IT.

Bài viết của Vinh Lê

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.