我有一個PHP特質的問題。 我想在課堂上和課堂中使用的特質中使用特質。PHP:在類和其他性狀相互衝突的性狀
例子:
trait Loggable {
protected function log(msg) {
echo msg;
}
}
trait SomeOtherTrait {
use Loggable;
}
class MyClass {
use SomeOtherTrait, Loggable;
}
但是這導致了衝突,因爲可記錄的是在課堂上使用兩次(一次在課堂上,一旦通過其他性狀),但由於封裝我不明白的問題功能是什麼特質,是嗎? 所以我只是想使用的日誌方法無處不在我包括可記錄性狀...
所以問題是:爲什麼我有碰撞?兩者(特質和班級)都指向相同的特質和方法,所以它不應該是衝突。
的可能的複製(http://stackoverflow.com/questions/13582061/how-to -use-a-trait-several-in-a-class) –
不幸的是,這個解決方案不起作用。將SomeOtherTrait改爲'使用Loggable {log as traitLog; }'然後'$ this-> traitLog(...)'給出相同的錯誤 – JaschaL
特徵不能替代多重繼承。它只是複製粘貼的替代品。在這種情況下,你粘貼了相同的特徵兩次,所以所有的方法出現兩次。解決方案非常簡單,只是不要在頂層包含'Loggable'。 – Evert