当前位置: 首页 > 知识库问答 >
问题:

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

刘海
2023-03-14

我搜索了这个网站和谷歌,最终创建了这个帐户…
我需要一些关于php、traits和类的帮助。我有两个不同的特点,有一些同名的方法。

问题在于我需要他们两个!我不能用insteadof...

下面是一个示例代码: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();

所以,这个例子以一个明显的

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

如何在不更改方法名称的情况下解决此问题?有可能吗?

顺便说一句,这是我一生中见过的最糟糕的编辑!

共有1个答案

顾跃
2023-03-14

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

添加到使用块:

traitA::myfunc insteadof traitB;

(或者< code>traitB::myfunc代替traitA)

它应该有效。

您现在有两个所需的别名,冲突也已解决。

 类似资料:
  • 问题内容: 我说错了 不推荐使用的:与类相同名称的方法在将来的PHP版本中将不再是构造函数;TSStatus在第10行的C:\ Program Files(x86)\ Zend \ Apache24 \ htdocs \ viewer \ modules \ tsstatus \ tsstatus.php中已弃用构造函数 TSStatus类是第10行,并在底部的TSStatus显示 问题答案: 如

  • 本文向大家介绍PHP函数超时处理方法,包括了PHP函数超时处理方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP函数超时处理方法。分享给大家供大家参考,具体如下: register_shutdown_function Registers the function named by function to be executed when script processing is c

  • 本文向大家介绍PHP pthreads v3下同步处理synchronized用法示例,包括了PHP pthreads v3下同步处理synchronized用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP pthreads v3下同步处理synchronized用法。分享给大家供大家参考,具体如下: 之所以会用到同步,是因为如果多个线程中对同一个资源进行操作时,会发生混乱。

  • 本文向大家介绍PHP date函数常用时间处理方法,包括了PHP date函数常用时间处理方法的使用技巧和注意事项,需要的朋友参考一下 PHP星期几获取代码: 获取中文星期可以这样 获取指定日期是: [code] $weekarray=array("日","一","二","三","四","五","六"); echo "星期".$weekarray[date("w","2011-11-11")];

  • 本文向大家介绍pandas 使用apply同时处理两列数据的方法,包括了pandas 使用apply同时处理两列数据的方法的使用技巧和注意事项,需要的朋友参考一下 多的不说,看了代码就懂了! 以上这篇pandas 使用apply同时处理两列数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 说完Invoker接口,我们继续看Reflector对象依赖的PropertyNamer对象。 PropertyNamer对象是mybatis中提供的一个处理属性的工具类,它主要用于获取getter/setter方法对应的属性名称,校验方法名称是否是getter/setter方法,以及判断方法可以获取属性名称。 PropertyNamer提供了四个静态方法完成了上述的功能: 其中methodToP