【问题标题】:How to use a trait several times in a class?如何在课堂上多次使用 trait?
【发布时间】:2012-11-27 10:21:31
【问题描述】:

以下代码:

trait T {
    function foo() {}
}

class C {
    use T { T::foo as bar; }
    use T { T::foo as baz; }
}

产生以下错误:

Trait 方法栏没有被应用,因为有冲突 与 C 上的其他特征方法

是否可以在一个类中使用 trait 两次?

【问题讨论】:

    标签: php traits


    【解决方案1】:

    要“导入”多次使用不同名称在特征中定义的方法,请执行以下操作:

    class C {
      use T {
        foo as bar;
        foo as baz;
      }
    }
    

    【讨论】:

    • 我可以看到问题出在哪里,但是使用此解决方案,您只需使用 2 个功能完全相同的函数,并使用完全相同的内部结构。为什么你想要 2 个功能完全相同的功能?如果“bar”函数使用与“baz”函数不同的类属性会很酷(所以 bar 和 baz 实际上做同样的事情,但是两次),但事实并非如此?
    • 我认为这主要是一个理论问题,因此答案非常简单。
    • 实际上,我一生中至少需要这样做一次。在这种情况下,它是一个父类,它使用了 trait 两次,其中所有函数都采用某些参数,但它们在不同的上下文中意味着不同的东西。子类可以覆盖两个上下文之一而不影响另一个。
    【解决方案2】:

    是的,你可以使用一个 trait 两次:

    trait T {
        function foo() {}
    }
    
    class C {
        use T { T::foo as bar; T::foo as baz; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多