说到优先级,就必须要有一个对比的参照物,这里的参照对象时引用Trait的类及其父类。
通过以下的代码来证明Trait应用中的属性的优先级:
publicF();
$this->protectF();
}
}
$publish = new Publish();
$publish->doPublish();
上述代码的输出结果如下: Publish::publicF public function
Log::protectF protected function
通过上面的例子,可以总结出Trait应用中的优先级如下:
1.来自当前类的成员覆盖了 trait 的方法
2.trait 覆盖了被继承的方法
类成员优先级为:当前类>Trait>父类 4. Insteadof和As关键字
在一个类中,可以引用多个Trait,如下:
startLog();
$this->parameterCheck($para);
$this->endLog();
}
}
通过上面的方式,我们可以在一个类中引用多个Trait。引用多个Trait的时候,就容易出问题了,最常见的问题就是两个Trait中如果出现了同名的属性或者方法该怎么办呢?这个时候就需要用到Insteadof 和 as 这两个关键字了.请看如下实现代码:
startLog();
$this->parameterCheck('params');
$this->csl();
}
}
$publish = new Publish();
$publish->doPublish();
执行上述代码,输出结果如下: Log::startLog public function
Check::parameterCheck parameter checkparams
Check::startLog public function