कभी-कभी मुझे दादा-दादी विधि (यानी, मूल विधि को बाईपास) निष्पादित करने की आवश्यकता होती है, मुझे पता है कि यह कोड गंध है, लेकिन कभी-कभी मैं अन्य वर्गों (ढांचे, पुस्तकालयों, आदि) को नहीं बदल सकता।E_STRICT त्रुटि प्राप्त किए बिना दादा-दादी विधि को कैसे कॉल करें?
सख्त मानकों:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
समस्या अगर आपके पास है कि E_STRICT त्रुटियों सक्षम आप की तरह एक त्रुटि प्राप्त होगी है: गैर स्थैतिक विधि
पीएचपी में हम साथ कुछ की तरह ऐसा कर सकते हैं GrandParent :: grandParentMethod() को स्थिर रूप से नहीं कहा जाना चाहिए ...
मुझे इसके लिए केवल एक समाधान मिला है (E_STRICT को हटाए बिना), और यह केवल @
को जोड़ रहा है त्रुटि को उतारो।
लेकिन यह वास्तव में बदसूरत है, क्या कोई बेहतर समाधान जानता है?
धन्यवाद! पुनश्च: मैं की तरह एक नई वस्तु का दृष्टांत नहीं कर सकते हैं:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
क्योंकि मैं $ बेटे के संदर्भ में मेरे दादा-दादी विधि कॉल करने की जरूरत है।
अरे एनरिक, क्रिंकल के उत्तर की तरह दिखता है और अधिक उपयुक्त और स्पष्ट है। दादा वर्ग से इसे एक्सेस करने के लिए आपको दादा वर्ग पर सार्वजनिक पहुंच सेट करने की भी आवश्यकता नहीं है ... यदि आप सहमत हैं, तो क्या आप क्रिंकल के उत्तर के स्वीकृत उत्तर को बदल सकते हैं? – a20