मैं दो पीएचपी लक्षण है कि प्रत्येक एक ही 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
में कई विधियां हैं और 2 से अधिक लक्षणों से विरासत में मिला है, इसलिए जब भी मैं इनमें से 1 से अधिक लक्षणों का उपयोग करता हूं, तो मैं वास्तव में insteadof
की लंबी स्ट्रिंग को दोहराना नहीं चाहता हूं। Conflict Resolution
If two Traits insert a method with the same name, a fatal error is produced, if the conflict is not explicitly resolved.
To resolve naming conflicts between Traits used in the same class, the insteadof operator needs to be used to choose exactly one of the conflicting methods.
Since this only allows one to exclude methods, the as operator can be used to allow the inclusion of one of the conflicting methods under another name.
उदाहरण::
लघु संस्करण: नहीं, मैन्युअल रूप से टकराव से निपटने लक्षण प्रयोग करने के लिए कीमत है। – VolkerK
मुझे संदेह है कि आप लक्षणों का दुरुपयोग कर रहे हैं। मैं केवल अंतिम उपाय के रूप में लक्षणों का उपयोग करता हूं। इस उत्तर में विकल्पों पर एक अच्छा स्पष्टीकरण है (सी ++ में, लेकिन वे ज्यादातर किसी भी ओओपी भाषा पर लागू होते हैं) http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple-inheritance-in-c# उत्तर -407928 – Pevara