2010-04-16 15 views
13

मैं निम्न कार्य करने में सक्षम होना चाहते हैं:किसी अन्य वस्तु से stdClass ऑब्जेक्ट में गुण जोड़े

:

$obj = new stdClass; 
$obj->status = "success"; 

$obj2 = new stdClass; 
$obj2->message = "OK"; 

मैं कैसे obj इतना है कि यह $ obj2 के गुणों, जैसे होता है $ विस्तार कर सकते हैं

$obj->status //"success" 

$obj->message // "OK" 

मैं मैं, एक सरणी का उपयोग सरणी के लिए सभी गुण जोड़ने और फिर वापस आपत्ति उठाने डाली सकता है पता है, लेकिन वहाँ कुछ इस तरह एक और अधिक सुरुचिपूर्ण रास्ता है,:

का विस्तार ($ obj, $ obj2) ; // $ obj2 से $ obj

से सभी गुणों को जोड़ता है धन्यवाद!

उत्तर

23

यह है कि वे की तर्ज तरीका है कि आप यह कर नहीं करना चाहता था के साथ अधिक है क्लोनिंग वस्तु पर एक नज़र .... है गुणों पर पुनरावृत्ति करने से थोड़ा बेहतर है।

+0

आखिरकार, सबसे 'सुरुचिपूर्ण' लगता है, भले ही इसमें सरणी और पीछे का कलाकार शामिल हो। वैसे, ऑब्जेक्ट-टू-एरे कास्ट कितना महंगा है? क्या इसमें सभी गुणों के माध्यम से लूप शामिल है जिसे फिर सरणी के लिए कुंजी के रूप में जोड़ा जाता है? – Florin

5

आप stdClass वस्तु में से एक पर get_object_vars() इस्तेमाल कर सकते हैं, उन के माध्यम से पुनरावृति, और उन्हें दूसरे से जोड़ें:

function extend($obj, $obj2) { 
    $vars = get_object_vars($obj2); 
    foreach ($vars as $var => $value) { 
     $obj->$var = $value; 
    } 
    return $obj; 
} 

सुनिश्चित नहीं हैं कि अगर आप समझना चाहते हैं कि और अधिक सुरुचिपूर्ण, ध्यान रखें कि आप।

संपादित करें: यदि आप वास्तव में पर संग्रहीत करने के बारे में कठोर नहीं हैं, तो उन्हें this answer to a very similar question पर एक नज़र डालें।

+1

एक वैध समाधान है, लेकिन मुझे लगता है कि कास्ट-टू-एरे-एंड-बैक विधि वही काम करती है, सिवाय इसके कि यह आंतरिक रूप से PHP इंजन में किया गया है जो थोड़ा तेज़ होना चाहिए। – Florin

+0

बिल्कुल। इसलिए यह सुनिश्चित नहीं किया जा रहा है कि क्या यह वर्ग 'अधिक सुरुचिपूर्ण' होगा। जानवर बदसूरत हो सकते हैं, लेकिन वे वास्तव में काफी बदसूरत नहीं हैं। :) – pinkgothic

8

अगर वस्तु (है कि आपके मामले में है) stdClass का उदाहरण तो आप बस अपने वस्तु की तरह का विस्तार कर सकते है ...

$obj = new stdClass; 
$obj->status = "success"; 

$obj2 = new stdClass; 
$obj2->message = "OK"; 

$obj->message = $message; 
$obj->subject = $subject; 

.... और के रूप में कई के रूप में आप चाहते हैं।

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