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:

Sử dụng traits trong PHP | Comdy
Traits trong PHP là gì? Làm sao để sử dụng traits hiệu quả, tránh xung đột trong PHP?


Bài viết liên quan:

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.