#1. Bản chất
- Abstract Class: Dùng cho quan hệ “IS-A” (ví dụ:
Adminlà mộtUser). - Traits: Dùng cho hành vi “CAN-DO” (ví dụ:
Usercó thểHasApiTokens). Trait giúp tránh thảm họa đa kế thừa trong PHP.
#2. Code mẫu
trait Loggable {
public function log(string $msg) { /* ... */ }
}
class Order {
use Loggable; // Composition qua Trait
}
#3. Mẹo phỏng vấn
Q: Trait khác Interface thế nào? A: Interface định nghĩa HỢP ĐỒNG (cần implement hàm nào), Trait định nghĩa LOGIC (code thực tế để tái sử dụng).
Q: Trait có thể gây xung đột tên không?
A: Có, nếu 2 Trait cùng có phương thức tên giống nhau. Phải dùng cú pháp use T1, T2 { T1::method insteadof T2; } để giải quyết.