2011-01-24 7 views
14

मेरे पास stdClass ऑब्जेक्ट्स की एक सरणी है। जब मैं एक चर को एक असाइन करता हूं, तो यह चर की प्रतिलिपि नहीं बना रहा है बल्कि मूल चर का संदर्भ देता है। मेरा कोड इस तरह है:आप PHP में एक चर की स्पष्ट रूप से एक प्रति कैसे बनाते हैं?

for ($i = 0, $len = count($rows); $i < $len; $i++) 
{ 
    $row = $rows[$i]; 
    echo $rows[$i]->games; 
    $row->games = 'test'; 
    echo $rows[$i]->games; 
} 

पहला प्रतिध्वनि सामान्य मान आउटपुट करता है, लेकिन दूसरी गूंज "परीक्षण" आउटपुट करता है। भले ही मैं $row (जिसे कॉपी किया जाना चाहिए) पर संपत्ति सेट कर रहा हूं, यह वास्तव में इसे मूल सरणी तत्व पर सेट कर रहा है।

यह क्यों है, और मैं वास्तव में एक प्रति कैसे बना सकता हूं, ताकि कॉपी को संशोधित करने से मूल को संशोधित नहीं किया जा सके?

उत्तर

37

clone कीवर्ड का उपयोग करें।

$copy = clone $object; 

नोट करना महत्वपूर्ण है:

जब एक वस्तु क्लोन है, PHP 5 ऑब्जेक्ट के गुणों के सभी की एक उथले प्रतिलिपि प्रदर्शन करेंगे। कोई भी गुण जो अन्य चर के संदर्भ हैं, संदर्भ बने रहेंगे।

यह एक अच्छा जादू विधि के साथ आता है:

एक बार क्लोनिंग नव निर्मित वस्तु की __clone() विधि बुलाया जाएगा पूरा हो गया है, अगर एक __clone() विधि परिभाषित किया गया है, तो, अनुमति देने के लिए किसी भी आवश्यक गुणों को बदलने की जरूरत है।

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