परिचय
विरासत वस्तु उन्मुख प्रोग्रामिंग पद्धति का एक महत्वपूर्ण सिद्धांत है। इस सिद्धांत का प्रयोग करते हुए दो वर्गों के बीच संबंध को परिभाषित किया जा सकता है। PHP अपने ऑब्जेक्ट मॉडल में इनहेरिटेंस का समर्थन करती है।
PHP विस्तारित . का उपयोग करता है दो वर्गों के बीच संबंध स्थापित करने के लिए कीवर्ड।
सिंटैक्स
class B extends A
जहां ए बेस क्लास है (जिसे पैरेंट भी कहा जाता है) और बी को सबक्लास या चाइल्ड क्लास कहा जाता है। चाइल्ड क्लास को पैरेंट क्लास के सार्वजनिक और संरक्षित तरीके विरासत में मिलते हैं। चाइल्ड क्लास किसी भी विरासत में मिली विधियों को फिर से परिभाषित या ओवरराइड कर सकता है। यदि नहीं, तो इनहेरिट की गई विधियां चाइल्ड क्लास के ऑब्जेक्ट के साथ उपयोग किए जाने पर, पैरेंट क्लास में परिभाषित अपनी कार्यक्षमता को बनाए रखेंगी।
पैरेंट क्लास की परिभाषा चाइल्ड क्लास की परिभाषा से पहले होनी चाहिए। इस मामले में, ए क्लास की परिभाषा स्क्रिप्ट में क्लास बी की परिभाषा से पहले दिखाई देनी चाहिए।
उदाहरण
<?php class A{ //properties, constants and methods of class A } class B extends A{ //public and protected methods inherited } ?>
यदि ऑटोलोडिंग सक्षम है, तो क्लास स्क्रिप्ट लोड करके पैरेंट क्लास की परिभाषा प्राप्त की जाती है।
विरासत उदाहरण
निम्नलिखित कोड से पता चलता है कि चाइल्ड क्लास को पैरेंट क्लास के सार्वजनिक और संरक्षित सदस्यों को विरासत में मिला है
उदाहरण
<?php class parentclass{ public function publicmethod(){ echo "This is public method of parent class\n" ; } protected function protectedmethod(){ echo "This is protected method of parent class\n" ; } private function privatemethod(){ echo "This is private method of parent class\n" ; } } class childclass extends parentclass{ public function childmethod(){ $this->protectedmethod(); //$this->privatemethod(); //this will produce error } } $obj=new childclass(); $obj->publicmethod(); $obj->childmethod(); ?>
आउटपुट
यह निम्नलिखित परिणाम देगा। -
This is public method of parent class This is protected method of parent class PHP Fatal error: Uncaught Error: Call to private method parentclass::privatemethod() from context 'childclass'
विधि अधिभावी उदाहरण
यदि मूल वर्ग से विरासत में मिली एक विधि को चाइल्ड क्लास में फिर से परिभाषित किया जाता है, तो नई परिभाषा पहले की कार्यक्षमता को ओवरराइड कर देती है। निम्नलिखित उदाहरण में, publicmethod को फिर से चाइल्ड क्लास में परिभाषित किया गया है
उदाहरण
<?php class parentclass{ public function publicmethod(){ echo "This is public method of parent class\n" ; } protected function protectedmethod(){ echo "This is protected method of parent class\n" ; } private function privatemethod(){ echo "This is private method of parent class\n" ; } } class childclass extends parentclass{ public function publicmethod(){ echo "public method of parent class is overridden in child class\n" ; } } $obj=new childclass(); $obj->publicmethod(); ?>
आउटपुट
यह निम्नलिखित परिणाम देगा। -
public method of parent class is overridden in child class
पदानुक्रमिक वंशानुक्रम
PHP एकाधिक विरासत का समर्थन नहीं करता है। इसलिए एक वर्ग दो या दो से अधिक वर्गों का विस्तार नहीं कर सकता है। हालांकि, यह निम्न प्रकार से विरासत में मिली विरासत का समर्थन करता है:
उदाहरण
<?php class A{ function test(){ echo "method in A class"; } } class B extends A{ // } class C extends B{ // } $obj=new C(); $obj->test(); ?>
आउटपुट
यह निम्नलिखित परिणाम दिखाएगा
method in A class