Mục lục bài viết

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.

Tác giả

Vinh Lê

Giảng viên CNTT, chia sẻ tutorial lập trình & phần cứng tại Góc Học IT. Hơn 500 bài viết hướng dẫn từ cơ bản đến nâng cao.

Gợi ý tiếp theo

Phương thức tĩnh (static method) và thuộc tính tĩnh (static property) trong PHP

Học tiếp