2011-02-24 4 views
14

वास्तव में कोई समस्या नहीं है, मेरे हिस्से पर जिज्ञासा की तरह, लेकिन एक उदाहरण के रूप में, कहें कि मेरे पास एक PHP वर्ग है:

class baseTestMain 
{ 
    protected function testFunction() 
    { 
     echo 'baseTestMain says hi'; 
    } 
} 

और दूसरी कक्षा जो ऊपर की कक्षा से फैली हुई है:

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     parent::testFunction(); 
     //someextrastuffhere 
    } 
} 

आम तौर पर, जब मैं सबक्लास में एक नई विधि को परिभाषित करते समय एक मूल विधि को कॉल करना चाहता हूं तो मैं उपरोक्त - parent::methodnamehere() करता हूं हालांकि parent:: के बजाय आप $this->methodname() का भी उपयोग कर सकते हैं और ऑपरेशन वही होगा।

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     $this->testFunction(); 
     //someextrastuffhere 
    } 
} 

तो मैं जो पूछ रहा हूं, क्या मुझे parent::testFunction(); का उपयोग करना चाहिए या $this->testFunction(); का उपयोग करना चाहिए? या इसमें कोई फर्क पड़ता है कि मुझे याद आया है? यदि नहीं, तो आपकी प्राथमिकता या पसंदीदा विधि क्या है?

ध्यान दें कि मैं subclass में उस फ़ंक्शन को ओवरराइड या विस्तारित नहीं कर रहा हूं, अनिवार्य रूप से कार्यान्वयन माता-पिता से लिया जाता है।

उत्तर

26

आपके मामले में, aSubClass::testFunction()baseTestMain::testFunction() से विरासत में मिला है, $this->testFunction() का उपयोग करें। आपको केवल parent::testFunction() का उपयोग करना चाहिए यदि आप अपने उपखंड में उस क्रिया को ओवरराइड करने जा रहे हैं, इसके कार्यान्वयन के भीतर।

अंतर $this-> कॉल जबकि बच्चे के कार्यान्वयन अगर बच्चे माता-पिता से इनहेरिट के बजाय अपने स्वयं के कार्यान्वयन है कि parent:: माता पिता के कार्यान्वयन कॉल है।

+0

"ध्यान दें कि मैं उप-वर्ग में उस कार्य को ओवरराइड या विस्तारित नहीं कर रहा हूं, अनिवार्य रूप से कार्यान्वयन माता-पिता से किया जाता है।" –

+0

@Ignacio Vazquez-Abrams: धन्यवाद, मैंने शीर्ष पर एक और अनुच्छेद जोड़ा जो प्रश्न का उत्तर देता है। मुझे लगता है कि मेरा उदाहरण अप्रासंगिक है इसलिए मैंने इसे हटा दिया। – BoltClock

+1

@ एस्फेयर, पठनीयता और अवधारणा को ध्यान में रखते हुए, यह सबसे अच्छा जवाब है। –

5

माता-पिता पर विधि को कॉल करना कक्षा के बच्चों को पॉलिमॉर्फिज्म में भाग लेने से रोकता है क्योंकि विधि के उनके पुनर्वितरण को कभी नहीं कहा जाएगा।

संबंधित मुद्दे

 संबंधित मुद्दे