2010-07-22 18 views
5

संभव डुप्लिकेट:
What is the best method to merge two PHP objects?मैं दो वस्तुओं को कैसे विलय करूं?

मैं एक वस्तु, $ foo है, जो कुछ तरीकों और गुण पहले से परिभाषित और एक अन्य वस्तु, $ बार, जो सिर्फ सम्पत्तियों का एक समूह है । मैं $ bar की पूरी तरह से $ foo में विलय करना चाहता हूं जैसे कि $ बार के सभी गुण $ foo के गुण बन जाते हैं।

तो अगर पहले से मेरे पास $ bar-> foobar था, तो बाद में मुझे $ foo-> foobar का उपयोग करने में सक्षम होना चाहिए।

foreach($bar as $key => $value) { 
    $foo->$key = $value; 
    } 

हालांकि, अगर मैं सरणियों उपयोग कर रहे थे, मैं सिर्फ निम्न में से एक करना होगा::

पल में, मैं निम्नलिखित कर रहा हूँ

$foo += $bar; 

$foo = array_merge($foo, $bar); 

वहां भी इसी तरह रास्ता नहीं है वस्तुओं के साथ ऐसा करने के लिए या क्या मैं इसे पहले से ही सही तरीके से कर रहा हूं?

कृपया ध्यान दें कि मैं $ की संपत्ति ही क्या $ बार बन नहीं foo यानी नहीं $ foo-> bar-> foobar

उत्तर

3

हैं $ बार है $ foo के गुणों का है, तो यह एक फू है । इस प्रकार, आपकी बार कक्षा को फू का विस्तार (उत्तराधिकारी) होना चाहिए। (या इसके विपरीत, अगर मुझे आपके नाम उलझन में आ गए हैं!)

यदि आप किसी कारण से विरासत का उपयोग नहीं करना चाहते हैं, तो आप एक ऑब्जेक्ट को दूसरे के अंदर रख सकते हैं, और अन्य ऑब्जेक्ट्स को बाहरी ऑब्जेक्ट से कॉल रीडायरेक्ट कर सकते हैं गतिशील रूप से जादू विधियों जैसे __get() और __set (here देखें)

0

एक ऑब्जेक्ट के सभी गुणों को किसी अन्य की प्रतिलिपि बनाने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है।

जिस तरह से आप इसे करते हैं वह शायद सबसे सरल है। एक __get विधि के साथ $ foo की श्रेणी प्रदान करने का एक विकल्प जो संपत्ति को $ बार से सीधे लौटाता है।

15

इस कोड

echo $obj->name; //show: carlos 
echo $obj2->lastname; //show: montalvo here 

$obj_merged = (object) array_merge((array) $obj, (array) $obj2); 

$obj_merged->name; //show: carlos 

$obj_merged->lastname; //show: montalvo here 
+0

यह जवाब है निश्चित रूप से प्रयास करें? –

+1

यह ध्यान दिया जाना चाहिए कि यह विधि केवल गुणों के लिए काम करती है, जहां तक ​​मुझे पता है कि PHP संस्करण <= 5.4 पर विधियां नहीं हैं। – PowerAktar

+0

क्या किसी ऑब्जेक्ट को जोड़ना संभव है, ताकि '$ obj' में' $ obj' और 'obj2' दोनों हो? – Moseleyi

संबंधित मुद्दे