2017-08-09 64 views
1
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(); 
    } 
} 

当调用就像上面说的,将返回错误运行的方法:致命错误:不能让匹配非静态特质与相同的方法类,一个静态

的类不被写入静态方法由我和我在其他多个地方使用的特质。如果我必须重写这个特性,或者不得不制作一个新的特性,只是为了让它与这个类共同工作,那该死的。

有没有办法让它工作?

干杯

+0

我认为你应该添加你的更新作为答案,也接受它。如果有人找到了更好的解决方案,你仍然可以在以后改变,但在此之前,这可能和未来的访问者一样好。 – Yoshi

+0

@Yoshi ..我会这样做,谢谢你的回答。 –

+0

从您发布的小代码中,troublemaker是'TestClassOne :: matches()'。你有什么好的理由让它变成静态的吗? – axiac

回答

0

那么我做了一个黑客攻击的一位工作...但我不喜欢它... ... 有人有这样做的更好的方式?

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

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

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

    } 
相关问题