学科分类
目录
PHP基础

Trait优先级

当类之间有继承关系并且引入了Trait,Trait在引入过程中可能与类本身或者父类拥有同名成员。当出现同名属性时,必须保证同名同值,否则程序报错;当出现同名方法时,系统会认定为重写,调用的优先级为“子类 > Trait > 父类”。

接下来演示子类、Trait和父类中存在同名方法时调用的优先级,具体代码如下。

 1  trait Eat
 2  {
 3    public function eat()
 4    {
 5      echo 'Eat::eat';
 6    }
 7  }
 8  class Human
 9  {
 10   public function eat()
 11   {
 12     echo 'Human::eat';
 13   }
 14 }
 15 class Man extends Human
 16 {
 17   use Eat; 
 18   public function eat()
 19   {
 20     Echo 'Man::eat';
 21   }
 22 }
 23 $man = new Man();
 24 $man->eat();  // Man::eat

在上述代码中,分别定义了Trait和Human类,通过Man类继承和引用,在Man类中定义了同名eat()方法。第23、24行代码实例化Man类并调用eat()方法。从输出结果可以看出,优先调用子类方法,如果将Man类中的eat()方法删除,则第24行输出结果为Eat::eat,说明调用的是Trait中的方法,如果想要使用父类方法,则使用parent关键字进行调用即可。

点击此处
隐藏目录