Hướng dẫn dùng php trait trong PHP

PHP, Java hay Ruby đều là những ngôn ngữ hướng đối tượng chỉ hỗ trợ single inheritance[đơn kế thừa]. Để khắc phục những giới hạn của đơn kế thừa trong việc sử dụng lại source code, từ PHP 5.4 trở đi PHP hỗ trợ Traits là cơ chế giúp cho lập trình viên có thể sử dụng lại các phương thức từ các class khác nhau một cách dễ dàng hơn.

Traits cũng tương tự như class, nhưng chỉ được dùng với mục đích nhóm lại một số chức năng một cách đồng nhất. Để đơn giản, hãy dùng thử Traits qua ví dụ.

Ví dụ về Traits

Chúng ta sẽ thử một ví dụ về việc kế thừa. Ta sẽ thử với 3 lớp:

  • Human: có thể talk
  • Developer: ngoài talk, anh ấy còn code
  • Tester: tester chỉ cần biết test mà không cần code.

Thông thường chúng ta sẽ định nghĩa như sau:
[trong ví dụ này mình lưu vào file có tên là traits_test.php]

class Human
{
    public function talk[]
    {
        echo "I can talk";
    }
}

class Developer extends Human
{
    public function code[]
    {
        echo "I can code";
    }
}

class Tester extends Human
{
    public function test[]
    {
        echo "I can test";
    }
}

Để dễ dàng trực quan, ta sẽ thêm 1 static method có tên là canDo vào class Human để có thể dễ dàng kiểm tra xem ai có thể làm gì nhé :D .

class Human
{
.....
    public static function canDo[]
    {
        $message = '';

        $methods = get_class_methods[static::class];
        foreach [$methods as $method] {
            if [$method == __FUNCTION__] continue;
            $message .= " `$method`";
        }

        echo static::class . ' can do:' . $message . PHP_EOL;
    }
}

method canDo[] sẽ làm nhiệm vụ liệt kê tất cả các method có trong class hiện tại ngoại trừ nó, qua đó ta có thể biết được ai làm được những gì bằng việc gọi method này.

Chủ Đề