私は、それぞれが同じ第三トレイトを継承する2つのPHPの形質を持っている:特質の衝突を避ける - use_once?
trait C {
public function smallTalk() {
echo 'c';
}
}
trait A {
use C;
public function ac() {
echo 'a'.smallTalk();
}
}
trait B {
use C;
public function bc() {
echo 'b'.smallTalk();
}
}
を私はクラスでそれらの両方を使用したい:
class D {
use A, B;
public function acbc() {
echo ac().bc();
}
}
が、私はエラー
を得続けますFatal error: Trait method smallTalk has not been applied, because there are collisions with other trait methods on D
私が知っているのはuse_once
ではありませんが、私は同じ機能を探していますrequire_once
またはinclude_once
が提供するが、形質のために。この例は単純化されています。私の本物のC
にはたくさんのメソッドがあり、2つ以上の特性に継承されていますので、これらの特性を1つ以上使用するたびに長い文字列insteadof
を繰り返す必要はありません。
ショートバージョン:いいえ、手動で衝突を処理する特性を利用するための価格です。 – VolkerK
私はあなたが形質を乱用していると思う。私は最後の手段としてのみ形質を使います。この回答は、代替案(C++では良い記述がありますが、主にOOP言語に適用されます)http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple-inheritance-in-c#答え-407928 – Pevara