PHP:使用相同名称的方法处理特征

Hac*_*Kan 7 php inheritance scope class traits

我已经在这个网站和Google上进行了搜索,最终创建了这个帐户...
我需要有关php,特征和类的帮助。我有这2个不同的特征,其中一些方法具有相同的名称。

问题取决于我需要他们两个!我不能代替...

这是一个示例代码:http : //sandbox.onlinephpfunctions.com/code/b69f8e73cccd2dfd16f9d24c5d8502b21083c1a3

trait traitA {
    protected $myvar;
    public function myfunc($a) { $this->myvar = $a; }
}

trait traitB
{
    public function myfunc($a) { $this->myvar = $a * $a; }
}


class myclass 
{
    protected $othervar;

    use traitA, traitB {
        traitA::myfunc as protected t1_myfunc;
        traitB::myfunc as protected t2_myfunc;
    }

    public function func($a) {
        $this->myvar = $a * 10;
        $this->othervar = t2_myfunc($a);
    }

    public function get() { 
        echo "myvar: " . $this->myvar . " - othervar: " . $this->othervar; 
    }
}

$o = new myclass;
$o->func(2);
$o->get();
Run Code Online (Sandbox Code Playgroud)

因此,此示例的结尾很明显

致命错误:特质方法myfunc尚未应用,因为myclass上与其他特征方法存在冲突

我该如何解决而又不更改那些方法的名称?可能吗?

附带一提,这是我一生中见过的最糟糕的编辑器!

bwo*_*ebi 8

您仍然需要解决冲突以支持一种特质。在这里,您仅使用别名。这不是重命名,而是别名。

添加到use块:

traitA::myfunc insteadof traitB;
Run Code Online (Sandbox Code Playgroud)

(或traitB::myfunc insteadof traitA;

它应该工作。

现在,您可以根据需要使用两个别名,并且冲突也已解决。