У меня есть два PHP черты, которые каждый из наследуемых от того же 3-го признака:избежать столкновений признаков - 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
имеет множество методов и наследуется многими более чем двумя чертами, поэтому я не хочу повторять длинную строку insteadof
каждый раз, когда я использую более 1 из этих признаков.
короткая версия: Нет, вручную обработки коллизий цена за использование черты. – VolkerK
Я подозреваю, что вы злоупотребляете чертами. Я использую только черты как последнее средство. Этот ответ имеет хорошее объяснение альтернатив (на C++, но они в основном применяются к любому языку ООП) http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple-inheritance-in-c# answer-407928 – Pevara