मेरे पास एक अमूर्त पैरेंट क्लास Mongo_Document
(mongodb-php-odm से) और विरासत वर्ग Model_ActionPlan
है। Mongo_Document
में जादू __isset और __get विधियां हैं जो Mongo_Document
कक्षा के अंदर एक सरणी के साथ बातचीत करती हैं।PHP चाइल्ड क्लास मैजिक __isset काम करता है लेकिन __get
मैं (Model_ActionPlan
की एक विधि के अंदर से स्निपेट) निम्नलिखित कोड का उपयोग करने की कोशिश कर रहा हूँ: (। ध्यान दें कि close_type
अगर status == 'closed'
स्थापित किया जाना निश्चित है)
if (isset($this->status))
{
if (($this->status === "closed") AND ($this->close_type != "failure"))
{
return;
}
}
isset
कॉल रिटर्न true
और उसके बाद निष्पादन अगले कथन में आता है। वहाँ, मैं निम्न त्रुटि प्राप्त:
Undefined property: Model_ActionPlan::$status
हालांकि, अगर मैं $this->status
parent::__get('status')
साथ, इस कोड अपेक्षित ढंग से काम करता है की जगह। ध्यान दें कि इसके अलावा सभी जगह कार्यक्रम में, मैं का उपयोग करने में सक्षम हूँ:
$ap = new Model_ActionPlan($plan_id);
echo $ap->status;
// Prints 'closed' (or 'active') as expected
यह केवल यहाँ, वर्ग के अंदर ही है, कि यह काम नहीं करता।
मैंने चारों ओर देखा और मुझे लगता है कि कहीं भी ऐसा नहीं लगता है कि जादू वर्ग को बाल वर्ग में नहीं कहा जा सकता है। मैं इसके बजाय parent::__get
कॉल का उपयोग कर सकता हूं लेकिन मुझे लगता है कि शायद ऐसा करने का गलत तरीका है। क्या किसी को पता है कि ऐसा करने का सही/बेहतर तरीका है?
अपडेट किया गया # 1 2012-12-16: माता पिता वर्ग से भरा कोड here on Github है।
अपडेट किया गया # 2 2012-12-18: लोग हैं, जो के बारे में जहां या क्या यह ठीक से सेट कर दिया जाता पूछा के लिए, जवाब है कि के बाद से बुला parent::__get('status')
काम करता है, समस्या स्पष्ट रूप से नहीं है कि चर रहा है सेट नहीं हो रहा है। __get()
को _object
नामक एक निजी इंस्टेस वैरिएबल से अपना डेटा प्राप्त हो रहा है। अगर मैं var_dump($this)
, मुझे लगता है कि $this->_object['status']
अपेक्षित "बंद" मान के बराबर है।
# 3 अद्यतन: बच्चे वर्ग के कोड https://gist.github.com/4332062 पर उपलब्ध है। महत्वपूर्ण हिस्सा लाइन 69.
मैं this similar question देखा है पर शुरू होता है, लेकिन यह है कि एक माता-पिता जादू पद्धति का उपयोग करके बच्चे के गुण प्राप्त करने के बारे में है और अपनी समस्या माता पिता की गेटर उपयोग कर रहा है माता पिता के गुण प्राप्त करने के।
PHP के कौन-सा संस्करण पर कर रहे हैं? ऐसा नहीं होना चाहिए। –
मैं अपने परीक्षण सर्वर पर '5.4.8-NTS-VC9 (विंडोज FastCGI)' उपयोग कर रहा हूँ मेरी स्थानीय मशीन पर और '5.3.10-1ubuntu3.4'। समस्या दोनों पर होती है। –
मैंने जादू विधियों के साथ बेस क्लास बनाकर इस मुद्दे को पुन: पेश करने का प्रयास किया है और फिर इसे विस्तारित किया है, लेकिन ऐसा लगता है कि आप जिस समस्या का सामना कर रहे हैं उसे प्रदर्शित नहीं कर रहा है। –