php - 如何在不冲突的情况下在另一个 PHP Trait 中使用 PHP Trait?

标签 php oop metaprogramming traits

所以基本上这就是代码:在我的特质问候语中,我想使用另一个非常有用的特质词。但现在如果一个类使用 Greeting,它就不能再使用 Word,尽管我使用了别名。

当然,我可以使用代替,但对于使用我的库的人来说,错误来自何处以及涉及哪些特征并不明显。为什么这里会出现冲突,是否有语法技巧可以避免使用 not ?谢谢。

trait Word {
    public function hello()
    {
        return 'hello';
    }
}

trait Greeting {
    use Word {
        Word::hello as _word_hello;
    }
    public function greet($name)
    {
        return $this->_word_hello() . " $name";
    }
}

class Test {
    use Word;
    use Greeting;
}

PHP Fatal error:  Trait method hello has not been applied, because there are collisions with other trait methods on Test in traits.php on line 20

最佳答案

经过一番小研究,我发现特征函数的 as 运算符会创建一个别名,但不会重命名该函数。因此 Greeting 特征仍然在使用它的类中创建一个 hello 函数。

相关问题:Why method renaming does not work in PHP traits?

(作为个人注释,我认为这是非常糟糕的设计)。

关于php - 如何在不冲突的情况下在另一个 PHP Trait 中使用 PHP Trait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606538/

相关文章:

java - 为对象创建特定的时间戳?

java - 如何从对象数组创建数组

c++ - SFINAE 检查继承的成员函数

c++ - 确定未定义函数的参数类型

PHP更新数据库数据

php - 从外部站点的特定 div 中提取数据

design-patterns - 探索工厂设计模式

c++ - 不能在函数声明中使用模板参数

javascript - js window.redirect 不断更新

php - 使用 WinJS.xhr() 检索 JSON :