PHP 解决冲突
示例
试图在一个类别中使用多个特征可能导致涉及冲突方法的问题。您需要手动解决此类冲突。
例如,让我们创建此层次结构:
trait MeowTrait { public function say() { print "Meow \n"; } } trait WoofTrait { public function say() { print "Woof \n"; } } abstract class UnMuteAnimals { abstract function say(); } class Dog extends UnMuteAnimals { use WoofTrait; } class Cat extends UnMuteAnimals { use MeowTrait; }
现在,让我们尝试创建以下类:
class TalkingParrot extends UnMuteAnimals { use MeowTrait, WoofTrait; }
php解释器将返回致命错误:
致命错误:尚未应用特质方法,因为TalkingParrot与其他特征方法存在冲突
要解决此冲突,我们可以这样做:
使用关键字insteadof来使用一个特征的方法,而不是另一个特征的方法
使用类似的构造为方法创建别名 WoofTrait::sayassayAsDog;
class TalkingParrotV2 extends UnMuteAnimals { use MeowTrait, WoofTrait { MeowTrait::say insteadof WoofTrait; WoofTrait::say as sayAsDog; } } $talkingParrot = new TalkingParrotV2(); $talkingParrot->say(); $talkingParrot->sayAsDog();
此代码将产生以下输出:
喵
汪汪