匿名用户
如果类直接实现方法,它将不会使用traits版本。也许你想到的是:trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
function calc($v) {
return $v+2;
}
}
class MyChildClass extends MyClass{
}
class MyTraitChildClass extends MyClass{
use A;
}
print (new MyChildClass())->calc(2); // will print 4
print (new MyTraitChildClass())->calc(2); // will print 3
因为子类不直接实现该方法,所以它们将首先使用该特征的方法,如果另外使用父类的方法。
如果需要,该特征可以在父类中使用method(假设您知道该方法会在那里)。trait A {
function calc($v) {
return parent::calc($v*3);
}
}
// .... other code from above
print (new MyTraitChildClass())->calc(2); // will print 8 (2*3 + 2)
您还可以提供重写的方法,但仍然可以访问trait方法&#x