仔細閱讀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