2017-08-09 29 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(); 
     } 

    } 
相關問題