在多个堆叠特征中链接相同的方法

时间:2018-06-07 12:39:41

标签: php multiple-inheritance traits

我试图从两个独立的特征中运行两个函数,这两个特征将在一个类中应用,但顺序一个添加到另一个类中。一个简单的例子如下所示

trait UserLevel{
    public function get(){
        echo 'World';
    }
}

trait SpecialUser{
    use UserLevel {
        UserLevel::get as userGet;
    }

     public function get(){

         echo 'Hello ';
         $this->userGet();
     }
}

Class GetUser{
    use UserLevel, SpecialUser;
}

$user = new GetUser;
$user->get(); 

我在这个问题上的所有Google搜索都显示了如何使用insteadof覆盖另一个。

编辑:

这个问题与引用的问题不重复。在运行具有规定更改的代码时,我得到了

  

致命错误:Trait方法get尚未应用,因为有   与第20行/ in / hg9ok中的GetUser上的其他特征方法冲突

     

使用代码255退出流程。

由于

1 个答案:

答案 0 :(得分:0)

从根本上说,你无法实现你所描述的目标。技术原因是,如果您尝试使用具有相同方法名称的多个特征(参见"冲突解决方案" documentation的一部分),您将会遇到致命错误无法从特征中选择性地访问某个方法(即UserLevel::get),但实际上这可能是误解或误用特征。

特征在于功能的横向组合以及示例的关键部分,表明这不是" SpecialUser"特征。如果这确实是一个特殊的用户,那么为什么它不是" User"的子类。你描述的功能而不是特质?

这是一个关于你在这里想要实现的目标的问题 - 不是从代码的角度来看,而是从整体上看 - 并且应用OOP而不是,这里似乎发生了什么,而不是另一种方式。