Ho due tratti di PHP che ogni ereditare dalla stessa 3 ° tratto:evitando collisioni di tratti - 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();
}
}
E voglio usarli entrambi in una classe:
class D {
use A, B;
public function acbc() {
echo ac().bc();
}
}
ma continuo a ricevere l'errore
Fatal error: Trait method smallTalk has not been applied, because there are collisions with other trait methods on D
Lo so use_once
non è una cosa, ma sto cercando la stessa funzionalità che require_once
o include_once
fornisce, ma per i tratti. Questo esempio è semplificato. Il mio vero C
ha molti metodi ed è ereditato da molti più di 2 tratti, quindi non voglio davvero dover ripetere una lunga stringa di insteadof
ogni volta che uso più di 1 di questi tratti.
versione corta: No, movimentazione manuale collisioni è il prezzo per l'utilizzo di tratti. – VolkerK
Sospetto che tu stia abusando di tratti. Io uso solo i tratti come ultima risorsa. Questa risposta ha una buona spiegazione sulle alternative (in C++, ma si applicano principalmente a qualsiasi linguaggio OOP) http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple-inheritance-in-c# answer-407928 – Pevara