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

Popular posts from this blog

How to Create Master-Details view using Asp.Net MVC framework -

delphi - Mouseover hint for TChart series value -

java - django-like frameworks? -