如果我使用两个不同特征的类,并且两个方法都具有相同名称但该方法的不同实现方式会发生什么?
答案 0 :(得分:1)
假设你有一个使用 A 和 B 特征的 Foo 类:
class Foo {
use A, B;
}
两个特征都有一个名称相似但实现不同的方法(实现并不重要):
trait A {
public function bar() {
return true;
}
}
trait B {
public function bar() {
return false;
}
Traits通过水平扩展类来工作。简单地说 - 只需在课堂上添加任何新内容即可。一切正常,直到特质方法和属性加倍。如果未明确解决此冲突,那么您自己会遇到致命错误。
甜蜜的部分是,你可以通过指定使用特征的方法来解决这个冲突:
class Foo {
use A, B {
B::bar insteadof A;
}
}
您也可以使用别名来保存其他方法:
class Foo {
use A, B {
B::bar insteadof A;
A::bar as barOfA;
}
}
manual的特征记录非常清楚,请查看。