PHP How to distinguish $this pointer in the inheritance chain? -


कृपया निम्न कोड को दबाए रखें

  class A {function __get ($ name) {If ($ name == 'service') {नया प्रॉक्सी लौटाओ ($ this); }} फ़ंक्शन रेंडर () {प्रतिध्वनि 'प्रतिपादन ए कक्षा:'। $ इस- & gt; सेवा-& gt; मिल ( 'शीर्षक'); } सुरक्षित फ़ंक्शन संसाधनफ़ाइल () {वापसी 'एरेस'; }} वर्ग बी विस्तारित करता है {सुरक्षित फ़ंक्शन संसाधन फ़ाइल () {रिटर्न 'बीर्स'; } फ़ंक्शन रेंडर () {मूल :: रेंडर (); प्रतिध्वनि 'प्रतिपादन बी वर्ग:' $ इस- & gt; सेवा-& gt; मिल ( 'शीर्षक'); }} क्लास प्रॉक्सी {निजी $ mSite = null; सार्वजनिक फ़ंक्शन __ रचना ($ साइट) {$ this- & gt; mSite = $ साइट; } सार्वजनिक फ़ंक्शन मिल ($ कुंजी) {// समस्या यहाँ}} // मूल स्क्रिप्ट में $ obj = new B (); $ Obj- & gt; प्रस्तुत करना ();  

सवाल है: विधि में 'प्राप्त' वर्ग 'प्रॉक्सी' में, मैं केवल $ mSite (ऑब्जेक्ट पॉइंटर) का उपयोग करके कैसे संबंधित संसाधन फ़ाइल नाम निकाला जाता है (resourceFile नाम देता है)? < / P>

इसके बारे में:

  सार्वजनिक फ़ंक्शन मिल ($ कुंजी) {$ फ़ाइल = $ this- & gt; mSite- & gt; संसाधनफ़ाइल (); }  

लेकिन इसके लिए ए :: संसाधनफ़ाइल () होना चाहिए सार्वजनिक अन्यथा आप इन तक पहुंच नहीं सकते हैं ऑब्जेक्ट गुंजाइश के बाहर की विधि - यही वह है जो पहुंच संशोधक के लिए डिज़ाइन किया गया है।

संपादित करें:

ठीक है - अब मुझे लगता है कि मैं समझता हूँ, आप क्या प्राप्त करना चाहते हैं निम्नलिखित उदाहरण को इच्छित व्यवहार प्रदर्शित करना चाहिए:

  वर्ग A {निजी फ़ंक्शन _method () {वापसी 'ए'; } सार्वजनिक फ़ंक्शन रेंडर करें () {echo $ this- & gt; _method (); }} वर्ग बी का विस्तार एक {निजी समारोह _method () {वापसी 'बी'; } सार्वजनिक फ़ंक्शन प्रस्तुत करना () {मूल :: रेंडर (); प्रतिलिपि करें $ this- & gt; _method (); }} $ B = नया बी (); $ बी & gt; प्रस्तुत करना (); // आउटपुट एबी  

लेकिन अगर आप मुझसे पूछें - मुझे लगता है कि आपको अपने डिज़ाइन के बारे में सोचना चाहिए क्योंकि समाधान कुछ हद तक हैकी है और कोड को देख रहे किसी को समझना मुश्किल है।


Comments