【问题标题】:Trait with same method as Class , one Static具有与 Class 相同方法的特征,一个静态
【发布时间】:2017-08-09 12:17:11
【问题描述】:
trait TestTrait
{
    public function matches()
    {

    }
}


class TestClassOne
{
    public static function matches()
    {

    }

}

class TestClassTwo extends TestClassOne
{
    use TestTrait {
        matches as alternativeMatches;
    }

    public function run()
    {
        $this->alternativeMatches();
    }
}

当调用上面看到的方法运行时,它会返回错误:致命错误:无法使静态方法匹配非静态

这些课程不是由我编写的,而且我在其他多个地方使用过的特性。如果我必须重写 trait .. 或者必须创建一个新的 trait,只是为了让它与这个类一起工作,那就太糟糕了。

有没有办法让它工作?

干杯

【问题讨论】:

  • 我认为您应该将更新添加为答案并接受它。如果有人找到更好的解决方案,您仍然可以稍后进行更改,但在此之前,这对于未来的访问者来说可能是最好的。
  • @Yoshi .. 我会这样做的,谢谢你的回答。
  • 从您发布的小代码来看,麻烦制造者是TestClassOne::matches()。你有什么好的理由让它static
  • @axiac : 如前所述,我没有写这个类.. 这是一个供应商类....
  • 在这种情况下,最好不要从TestClassOne 继承TestClassTwo,而是在其中嵌入一个TestClassOne 对象。 Favor composition over inheritance.

标签: php static traits


【解决方案1】:

好吧,我做了一些修改......但我不喜欢它...... 有人有更好的方法吗?

class TestClassTwo extends TestClassOne
    {
        use TestTrait {
            matches as alternativeMatches;
        }

        public function run()
        {
            $this->alternativeMatches();
        }

         public static function matches()
        {
            parent::matches();
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多