仔细阅读Trait documentation我建议尝试每个示例并进行自己的修改以确保您理解它。还有就是我的例子,希望它有助于:
<?php
class A {
public function foo() {
echo "x";
}
}
class B extends A {}
$test = new B();
$test->foo();
// result X
这是很清楚的,我认为,现在允许使用特点:
<?php
class A {
public function foo() {
echo "x";
}
}
trait T {
public function foo() {
echo "y";
}
}
class B extends A {
use T;
}
$test = new B();
$test->foo();
// result y
正如你所看到的特质方法覆盖基类的方法。现在让在B类
<?php
class A {
public function foo() {
echo "x";
}
}
trait T {
public function foo() {
echo "y";
}
}
class B extends A {
use T;
public function foo() {
echo "z";
}
}
$test = new B();
$test->foo();
// result z
的继承从基类构件通过由特质插入的构件覆盖创建FOO方法。优先顺序是来自当前类的成员重写Trait方法,它继而覆盖继承的方法。
从php手册:基类的继承成员被特性插入的成员重写。优先顺序是来自当前类的成员重写Trait方法,它继而覆盖继承的方法。 – 2015-02-11 12:07:52
@Debflav好吧,不像扩展类,因为扩展一个类时,子类将覆盖父类的方法(如果有的话)。当在类中插入特质时,类中的方法优先于特性。 – 2015-02-11 12:11:19
@AndreiP。,谢谢,我想我只是没有在手册 – drakonli 2015-02-11 12:41:18