Ben*_*min 12 php inheritance overriding traits
我想知道在当前的PHP 5.4实现中是否有可能出现这种行为的原因:
trait T {
public function test(PDO $pdo) {}
}
class C {
use T;
public function test(DOMDocument $dom) {}
}
Run Code Online (Sandbox Code Playgroud)
我认为一个类使用特征的事实,保证这个类有一个特定的接口可用.但是在这里,如果我们无意中将特征方法用于其他目的,我们甚至不会像经典继承那样收到严格标准通知.
这是故意特意允许的吗?做什么的?
Eug*_*ene 29
记录此行为.来自php.net(http://php.net/manual/en/language.oop5.traits.php):
来自基类的继承成员被特征插入的成员覆盖.优先顺序是来自当前类的成员重写Trait方法,这些方法返回覆盖继承的方法.
这里没有理由通知.
编辑:
我看了一些更严肃的文献来阐明这个话题:).看起来这种行为是特质定义的一部分.他们是以这种方式工作的.这来自研究"特征:可组合行为单位"(欧洲面向对象程序设计会议论文集):
特质组成的另一个特性是组成顺序无关紧要,因此必须明确消除特定歧义(参见第3.5节).使用以下两个优先规则解决由类别定义的方法和由合并的特征定义的方法之间的冲突.
- 类方法优先于特征方法.
- 特征方法优先于超类方法.这来自fl atte用属性,该属性表明特征方法的行为就好像它们是在类本身中定义的一样.
你可以在这里阅读更多:http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf