Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP ऑब्जेक्ट इनहेरिटेंस: extends कीवर्ड और मेथड ओवरराइडिंग


परिचय

इनहेरिटेंस ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पद्धति का एक महत्वपूर्ण सिद्धांत है। इस सिद्धांत का उपयोग करके दो क्लासेज के बीच संबंध परिभाषित किया जा सकता है। PHP अपने ऑब्जेक्ट मॉडल में इनहेरिटेंस का समर्थन करता है।

PHP दो क्लासेज के बीच संबंध स्थापित करने के लिए extends कीवर्ड का उपयोग करता है।

सिंटैक्स

class B extends A

जहां A बेस क्लास है (जिसे पैरेंट क्लास भी कहा जाता है) और B सबक्लास या चाइल्ड क्लास कहलाती है। चाइल्ड क्लास पैरेंट क्लास के public और protected मेथड्स इनहेरिट करती है। चाइल्ड क्लास इनहेरिट किए गए किसी भी मेथड को रीडिफाइन या ओवरराइड कर सकती है। यदि नहीं, तो इनहेरिटेड मेथड्स पैरेंट क्लास में परिभाषित उनकी कार्यक्षमता को बनाए रखते हैं, जब चाइल्ड क्लास के ऑब्जेक्ट के साथ उपयोग किए जाते हैं।

पैरेंट क्लास की परिभाषा चाइल्ड क्लास की परिभाषा से पहले होनी चाहिए। इस मामले में, क्लास A की परिभाषा स्क्रिप्ट में क्लास B की परिभाषा से पहले आनी चाहिए।

उदाहरण: बेसिक इनहेरिटेंस

<?php
class A {
    // क्लास A की प्रॉपर्टीज़, कॉन्स्टेंट्स और मेथड्स
}
class B extends A {
    // public और protected मेथड्स इनहेरिटेड
}
?>

यदि ऑटोलोडिंग सक्षम है, तो पैरेंट क्लास की परिभाषा क्लास स्क्रिप्ट लोड करके प्राप्त की जाती है।

इनहेरिटेंस उदाहरण: विजिबिलिटी

निम्न कोड दर्शाता है कि चाइल्ड क्लास पैरेंट क्लास के public और protected मेंबर्स को इनहेरिट करती है:

<?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(); // यह त्रुटि उत्पन्न करेगा
    }
}

$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'

नोट: Private मेथड्स चाइल्ड क्लास में इनहेरिट नहीं होते और एक्सेस नहीं किए जा सकते।

मेथड ओवरराइडिंग उदाहरण

यदि पैरेंट क्लास से इनहेरिट किया गया मेथड चाइल्ड क्लास में रीडिफाइन किया जाता है, तो नई परिभाषा पहले की कार्यक्षमता को ओवरराइड कर देती है।

<?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

महत्वपूर्ण नियम

  • क्लास डेफिनिशन ऑर्डर: पैरेंट क्लास चाइल्ड से पहले परिभाषित होनी चाहिए (ऑटोलोडिंग के बिना)।
  • केवल public और protected मेंबर्स इनहेरिट होते हैं।
  • कंस्ट्रक्टर इनहेरिट होते हैं लेकिन चाइल्ड में नया कंस्ट्रक्टर परिभाषित करने पर पैरेंट का कंस्ट्रक्टर ऑटोमैटिकली नहीं चलता (parent::__construct() कॉल करना पड़ता है)।
  • Final क्लासेज को एक्सटेंड नहीं किया जा सकता (अगले आर्टिकल देखें)।
  1. - C# में Object क्लास

    System.Object (या object) C# में सभी क्लासेस का अल्टीमेट बेस क्लास है। प्रत्येक टाइप प्रत्यक्ष या अप्रत्यक्ष रूप से इससे विरासत में मिलता है। Object क्लास के मुख्य मेथड्स मेथडविवरण Equals(Object)निर्दिष्ट ऑब्जेक्ट वर्तमान ऑब्जेक्ट के बराबर है या नहीं Equals(Object, Object)दो ऑब्जेक्ट इंस्टेंसेस बरा

  1. - C# में Inheritance (इनहेरिटेंस) क्या है?

    C# में इनहेरिटेंस (विरासत) इनहेरिटेंस एक मैकेनिज्म है जहां एक **डेराइव्ड क्लास** (चाइल्ड) **बेस क्लास** (पैरेंट) के मेंबर्स (फील्ड्स, मेथड्स, प्रॉपर्टीज) प्राप्त करती है। यह कोड पुन: उपयोग, एक्सटेंसिबिलिटी और पॉलीमॉर्फिज्म को सक्षम करता है। मुख्य अवधारणाएं सिंगल इनहेरिटेंस: एक क्लास केवल **एक** बे

  1. - C# में Stack क्लास

    Stack क्लास ऑब्जेक्ट्स के लास्ट-इन, फर्स्ट-आउट कलेक्शन को दर्शाता है। इसका उपयोग तब किया जाता है जब आपको आइटम्स का लास्ट-इन, फर्स्ट-आउट एक्सेस चाहिए। Stack क्लास की प्रॉपर्टी निम्नलिखित है - Count - स्टैक में एलिमेंट्स की संख्या प्राप्त करता है। Stack क्लास के मेथड्स निम्नलिखित हैं - Sr.No. मेथ