“PHP特性”;三角形“;附属国

“PHP特性”;三角形“;附属国,php,traits,Php,Traits,我们的项目中有一个小的伪代码场景: trait headFunction { protected function doStuffWithParam($param){ return $param; } } trait extA { use headFunction; protected function doExtAStuff($param){ ... return $this->doStuffWithPar

我们的项目中有一个小的伪代码场景:

trait headFunction {
    protected function doStuffWithParam($param){
       return $param;
    }
}

trait extA {
    use headFunction;

    protected function doExtAStuff($param){
        ...
        return $this->doStuffWithParam($param);
    }
}

trait extB {
    use headFunction;

    protected function doExtBStuff($param){
        ...
        return $this->doStuffWithParam($param);
    }
}

class classUsingTraits(){
    use extA, extB;

    ...
}
但有冲突:

尚未应用特征方法doStuffWithParam,因为在测试中与其他特征方法存在冲突

不幸的是,traits没有扩展选项

如何避免碰撞问题,而不使用traits将头部功能移动到类别-有什么解决方法吗?我们查看了PHP文档,但是soloution只针对2个特性-我们有这样的特性,大约10+-。。我们不能使用它

有没有办法解决这个问题


谢谢你的帮助

PHP在这段代码中遇到的问题是,当从extA而不是extB调用doStuff时,您可能会做一些不同的事情。如果总是做同样的事情,你可以使用
使用extA,extB{extA::doStuffWithParam而不是extB;}
解决类中的冲突,但是当你想使用3个或更多的trait时呢?同样的想法,这表明trait可能不是解决你的情况的理想方法。这也是大多数编程语言不提供多重继承的原因。traits的要点是:它是复制粘贴解决方案,仅此而已(仅由解释器完成)。作为“复制粘贴范例”,您必须确保不会发生冲突。