PHP में कक्षा स्तर पर एकाधिक विरासत की अनुमति है?PHP में कक्षा स्तर पर एकाधिक विरासत की अनुमति है?
उत्तर
एकाधिक विरासत Diamond Problem से पीड़ित है, जो अभी तक PHP में हल नहीं हुआ है (इस पर सहमत होने पर सहमत नहीं है)। इस प्रकार, PHP में कोई एकाधिक विरासत नहीं है।
BaseClass
/\
/\
ClassA ClassB
\/
\/
ClassC
दोनों ClassA
और ClassB
अपने तरीके होते foo()
है, जो एक आप ClassC
में कहेंगे परिभाषित हैं?
आप या तो उपयोग करने के लिए प्रोत्साहित किया जाता है object composition या interfaces (जो एकाधिक वंशानुक्रम की अनुमति देते हैं) या - अगर आप क्षैतिज पुन: उपयोग के बाद कर रहे हैं - जब तक हम Traits (या Grafts या जो कुछ भी वे तो कहा जाएगा है Decorator या Strategy पैटर्न पर गौर)।
कुछ संदर्भ:
ग्रेट विवरण धन्यवाद गॉर्डन !!! –
wooooooo, ग्राफिक्स! +1। –
PHP एकाधिक विरासत का समर्थन नहीं करता है।
PHP कक्षाओं के लिए एकाधिक विरासत का समर्थन नहीं करता है।
यह "एकाधिक विरासत का समर्थन नहीं करता है"? तो, इसका मतलब है कि यह करता है, है ना? –
क्या आपने अभी तक इसे सही नहीं किया है? – mega6382
नहीं, पीएचपी कक्षाएं केवल एक वर्ग, कई नहीं वारिस कर सकते हैं।
आप विधि और संपत्ति प्रतिनिधिमंडल का उपयोग कर इसे नकल कर सकते हैं, लेकिन यह is_a()
या instanceof
साथ काम नहीं करेंगे:
class A extends B
{
public function __construct($otherParent)
{
$this->otherParent = $otherParent;
}
public function __call($method, $args)
{
$method = array($this->otherParent, $method);
return call_user_func_array($method, $args);
}
}
पीएलएस विस्तृत मैं इस बिंदु को समझने के बारे में समझ गया ... –
कौन सा बिंदु? Is_a बिंदु है? या प्रतिनिधिमंडल? –
दोनों प्लस eloborate दोनों बिंदु, मैं एक नया कोडर हूँ इन अवधारणाओं से अवगत नहीं –
पीएचपी जैसे एकाधिक वंशानुक्रम का समर्थन नहीं करता है, लेकिन यह के सेट का पुन: उपयोग करने के लिए कुछ आराम प्रदान करता है traits
का उपयोग करके कई स्वतंत्र कक्षाओं में विधियां। एक trait
सिर्फ एक वर्ग की तरह लिखा गया है, लेकिन इसे स्वयं द्वारा तत्काल नहीं किया जा सकता है।
पूर्वता आदेश उदाहरण::
नीचेपीएचपी मैनुअल से उदाहरण के एक जोड़े हैं
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
आउटपुट:
trait A {
public function smallTalk() {
echo 'a';
}
public function bigTalk() {
echo 'A';
}
}
trait B {
public function smallTalk() {
echo 'b';
}
public function bigTalk() {
echo 'B';
}
}
class Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}
class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
:
Hello World!
यहाँ संघर्ष समाधान के साथ एक और उदाहरण है
अधिक जानकारी और की गहरी समझ के लिए PHP में एकाधिक विरासत।
- 1. एकाधिक विरासत टेम्पलेट कक्षा
- 2. सी स्तर पर PHP सरणी कैसे कार्यान्वित की जाती है?
- 3. कक्षा स्तर पर एक सशर्त विशेषता है?
- 4. कक्षा गुणों पर विरासत (पायथन)
- 5. जावास्क्रिप्ट में कक्षा विरासत
- 6. पायथन की एकाधिक विरासत: पाइथन में
- 7. शुरुआती के लिए PHP कक्षा विरासत
- 8. पाइथन में कक्षा विरासत
- 9. एकाधिक विरासत बुराई है?
- 10. उपयोगकर्ता आयनिस स्तर की अनुमति कैसे दें?
- 11. सिद्धांत 2 - कक्षा तालिका विरासत
- 12. एक्शनस्क्रिप्ट में एकाधिक विरासत 3
- 13. कोडनिर्देशक और एकाधिक विरासत?
- 14. जावा में विरासत का अधिकतम स्तर क्या है?
- 15. पायथन सजावट और कक्षा विरासत
- 16. पायथन कक्षा विरासत में इनहेरिट डॉकस्ट्रिंग
- 17. एकाधिक इंटरफ़ेस विरासत
- 18. जावा बीन प्रमाणीकरण: कक्षा-स्तर की सीमा
- 19. जाओ विवरण कक्षा स्तर
- 20. शेयरपॉइंट: आप सीमित पहुंच अनुमति स्तर
- 21. सी ++ एकाधिक विरासत प्रश्न
- 22. डुप्लिकेट की अनुमति नहीं होने पर MySQL एकाधिक डालें।
- 23. विरासत में सदस्य को क्यों अनुमति नहीं है?
- 24. वीबी नेट में एकाधिक विरासत संभव है?
- 25. कक्षा अपने सुरक्षा स्तर
- 26. NHibernate विरासत कक्षा लेकिन
- 27. PHP में कक्षा क्या है?
- 28. सी # समर्थन कक्षा/विधि स्तर पर क्यों नहीं है?
- 29. सिंगल टेबल विरासत या कक्षा तालिका विरासत?
- 30. इंटरफ़ेस की तरह विरासत
संभावित डुप्लिकेट में देखो, http: // stackoverflow।कॉम/प्रश्न/90 9 82/एकाधिक-विरासत-इन-पीएचपी –
मेरा मानना है कि स्वीकृत उत्तर यहां बदलना चाहिए, क्योंकि PHP में 'एकाधिक विरासत' के लिए एक समाधान है। जो [इस उत्तर] में वर्णित है (https://stackoverflow.com/a/46905316/2394254) लेकिन स्वीकृत उत्तर में नहीं। – mega6382