Trait

Trait Là Gì

Trait là cơ chế cho phép các lập trình viên có thể sử dụng lại các mã lệnh (code reuse) khi làm việc với ngôn ngữ chỉ cho phép thừa kế từ một lớp duy nhất (hay single inheritance) như PHP.

Các phương thức được nhóm vào một trait và có thể được sử dụng lại sau đó trong lớp khác tương tự như thừa kế. Tuy nhiên, trait khác với thừa kế ở chỗ một lớp có thể sử dụng nhiều trait khác nhau:

trait A {
    public function aMethod() {
    }
}

trait B {
    public function bMethod() {
    }
}

class C {
    use A, B;
}

$c = new C;
$c->aMethod();
$c->bMethod();

Trait được giới thiệu trong phiên bản PHP 5.4.0.

Định Nghĩa Trait

Trait được định nghĩa sử dụng từ khoá trait và theo sau bởi tên của trait :

trait HelloWorld {
}

Trait cũng có các phương thức giống như đối với lớp (class):

trait HelloWorld {
    public function say() {
        echo "Hello World!";
    }
}

Khác với lớp, bạn không thể khới tạo đối tượng từ trait. Đoạn mã dưới đây sẽ sinh ra lỗi khi thực thi:

trait HelloWorld {
    public function say() {
        echo "Hello World!";
    }
}
$h = new HelloWorld; // báo lỗi

Để sử dụng trait trong lớp chúng ta sử dụng từ khoá use:

class Person {
    use HelloWorld;
}

$me = new Person();
$me->say();

Tại Sao Cần Dùng Trait

Thông thường để sử dụng lại các phương thức từ một lớp khác chúng ta sẽ sử dụng thừa kế. Tuy nhiên với PHP mỗi lớp chỉ có thể thừa kế được từ một lớp duy nhất khác.

Ngược lại, bạn có thể sử dụng lại nhiều trait khác nhau trong cùng một lớp:

trait HelloWorld {
    public function sayHello() {
        echo "Hello World!";
    }
}

trait Greet {
    public function sayHi() {
        echo "Hi Everyone!";
    }
}

class Person {
    use HelloWorld, Greet;
}

$me = new Person();
$me->sayHello();
$me->sayHi();
Content must not be empty

Related Tutorial