Giải thích thứ tự ưu tiên cho trait trong PHP?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
262 lượt xem
PHP master

trait bị ghi đè nếu phương thức có cùng tên được định nghĩa trong lớp sử dụng trait. Thứ tự ưu tiên là các thành viên từ lớp hiện tại ghi đè các phương thức Trait, đến lượt nó sẽ ghi đè các phương thức kế thừa.

class BaseClass {
   function SomeMethod() { /* Do stuff here */ }
} 

interface IBase {
   function SomeMethod();
} 

trait myTrait {
   function SomeMethod() { /* Do different stuff here */ }
} 

class MyClass extends BaseClass implements IBase {
   use myTrait;

   function SomeMethod() { /* Do a third thing */ }
}

Khi tạo một instant của MyClass ở trên, những điều sau sẽ xảy ra:

  1. IBase interface yêu cầu cung cấp một hàm không tham số gọi là SomeMethod().
  2. Lớp cơ sở BaseClass cung cấp việc triển khai phương thức này - đáp ứng nhu cầu.
  3. trait myTrait cũng cung cấp một hàm không tham số được gọi là SomeMethod(), được ưu tiên hơn so với SomeMethod() của BaseClass.
  4. Lớp MyClass cung cấp phiên bản SomeMethod() của riêng nó - được ưu tiên hơn phiên bản của trait.
{{login.error}}