2011-09-01 19 views
32

क्या यह PHP में संभव है, कि एक अमूर्त वर्ग एक अमूर्त वर्ग से विरासत में मिलता है?php अमूर्त वर्ग एक और सार वर्ग

उदाहरण के लिए,

abstract class Generic { 
    abstract public function a(); 
    abstract public function b(); 
} 

abstract class MoreConcrete extends Generic { 
    public function a() { do_stuff(); } 
    abstract public function b(); // I want this not to be implemented here... 
} 

class VeryConcrete extends MoreConcrete { 
    public function b() { do_stuff(); } 

} 

(abstract class extends abstract class in php? एक जवाब नहीं देता है)

+1

क्या आप वास्तव में यहां पूछने से पहले कोड चलाते हैं? – Yoshi

+0

@ जकूब मुझे लगता है कि यह मेरे ज्ञान तक संभव है – Exhausted

+1

हां। काम नहीं किया। क्योंकि ... दूसरी कक्षा में 'अमूर्त सार्वजनिक समारोह बी();' '। इसके बिना यह जाता है। प्रश्न का उत्तर –

उत्तर

35

हाँ, यह संभव है।

यदि कोई सबक्लस अमूर्त सुपरक्लास के सभी अमूर्त तरीकों को लागू नहीं करता है, तो यह भी सार होना चाहिए।

+1

बिना 'अमूर्त सार्वजनिक फ़ंक्शन बी();' दूसरी कक्षा में यह काम करता है ... उत्तर दिया गया, धन्यवाद –

+0

ध्यान दें कि परिभाषाओं का क्रम महत्वपूर्ण है। यदि आप कक्षा को पहले कंक्रीट डालते हैं, तो आपको 'घातक त्रुटि: कक्षा' मोरकॉन्क्रेट 'त्रुटि नहीं मिली' त्रुटि मिलेगी। घोड़े से पहले अमूर्त गाड़ी न डालने से सावधान रहें। – RightHandedMonkey

5

हाँ, यह संभव है हालांकि, अपने कोड काम नहीं होगा यदि आप कहा जाता $VeryConcreteObject->b()

Here अधिक विस्तृत विवरण है।

3

यह काम करेगा, भले ही आप अमूर्त फ़ंक्शन बी() छोड़ दें; क्लास MoreConcrete में।

लेकिन इस विशिष्ट उदाहरण में मैं वर्ग "जेनेरिक" को इंटरफ़ेस में बदल दूंगा, क्योंकि इसमें विधि परिभाषाओं के बगल में कोई और कार्यान्वयन नहीं है।

interface Generic { 
    public function a(); 
    public function b(); 
} 

abstract class MoreConcrete implements Generic { 
    public function a() { do_stuff(); } 
    // can be left out, as the class is defined abstract 
    // abstract public function b(); 
} 

class VeryConcrete extends MoreConcrete { 
    // this class has to implement the method b() as it is not abstract. 
    public function b() { do_stuff(); } 
} 
संबंधित मुद्दे