【发布时间】: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.