के अनुसार कॉल करने के लिए बल ओवरराइड विधि मुझे इस उपयोग के मामले में एक सामान्य समस्या है: मेरे पास कक्षा A
है। इस वर्ग में एक गैर-अमूर्त विधि doStuffCallback()
है जिसे ओवरराइड किया जा सकता है लेकिन यह प्रत्येक उप-वर्ग के लिए आवश्यक नहीं है। लेकिन: मैं यह सुनिश्चित करना चाहता हूं कि यदि विधि ओवरराइड हो जाती है तो सबक्लास-विधि को माता-पिता विधि को कॉल करना होगा।ओओपी (PHP) - पैरेंट-विधि
उदाहरण:
abstract class A {
private function doStuff() {
$this->doStuffCallback();
}
protected function doStuffCallback() {
// IMPORTANT CODE HERE
}
}
class B extends A {
protected function doStuffCallback() {
parent::doStuffCallback(); // I want to enforce this because the parents method code is important
// ALSO IMPORTANT CODE
}
}
क्योंकि ओवरराइड विधि एक ही बात यह एक ही जिम्मेदारी के लिए दो तरीकों और एक निजी सहायक-विधि है जो दोनों कॉल को परिभाषित करने के बहुत बदसूरत होगा करता है। इस तरह:
abstract class A {
private function doStuff() {
$this->callDoStuffCallback();
}
private function callDoStuffCallback() {
$this->internalDoStuffCallback();
$this->doStuffCallback();
// This is VERY ugly
}
private function internalDoStuffCallback() {
// IMPORTANT CODE HERE
}
protected function doStuffCallback() {}
}
class B extends A {
protected function doStuffCallback() {
// IMPORTANT CODE
}
}
यह वास्तव में बदसूरत और श्रमिक है। तो मेरा प्रश्न: क्या माता-पिता विधि को कॉल करने के लिए अतिव्यापी तरीकों को बल देने के लिए PHP में कोई तरीका है?
आपके उत्तर के लिए धन्यवाद! मुझे बिल्कुल वही लगता है। मेरा मानना है कि आजकल हम जिस ओओपी का उपयोग करते हैं वह अभी तक पूरा नहीं हुआ है। ऐसे कई पहलू हैं जो महत्वपूर्ण हैं लेकिन संभाले नहीं जाते हैं। –