【发布时间】:2015-08-12 10:47:06
【问题描述】:
好吧,给出以下条件:
trait Base
{
public function doSomething()
{
// Do fancy stuff needed in other traits
}
}
trait A
{
use Base;
public function foo()
{
// Do something
}
}
trait B
{
use Base;
public function bar()
{
// Do something else
}
}
我现在喜欢实现一个使用两个特征 A 和 B 的类:
class MyClass
{
use A, B;
}
PHP 告诉我它不能重新定义函数doSomething()。 PHP 无法检测到A 和B 共享一个相同的特征并且不将其复制两次到MyClass 的原因是什么(它是一个错误还是一个阻止我编写不干净代码的功能)?
对于我的问题是否有更好的解决方案,然后是我最终使用的解决方法:
trait Base
{
public function doSomething()
{
// Do fancy stuff needed in other traits
}
}
trait A
{
abstract function doSomething();
public function foo()
{
// Do something
}
}
trait B
{
abstract function doSomething();
public function bar()
{
// Do something else
}
}
然后是我的班级:
class MyClass
{
use Base, A, B;
}
【问题讨论】: