2012-06-17 5 views
6

मैं PHP में एक वेब एपीआई क्लाइंट प्रोग्रामिंग कर रहा हूं जो एसएसवी डेटा को सहयोगी सरणी में पार्स करता है और मैं इन उपयोगकर्ताओं को उपयोग करते समय अपने उपयोगकर्ताओं को डेटा-डुप्लिकेशन से सुरक्षित रखना चाहता हूं।क्या कॉपी-ऑन-राइट सरणी पर डेटा डुप्लिकेशन को रोक देगा?

मेरे उपयोगकर्ता इन सरणीओं को कभी भी नहीं लिखेंगे (सैद्धांतिक रूप से वे कर सकते हैं लेकिन यह अभ्यास में कोई समझ नहीं आता है)।

अब मेरा प्रश्न है ... यदि मेरे उपयोगकर्ता इन सरणी को विधियों के तर्क के रूप में पास करते हैं, तो PHP की कॉपी-ऑन-राइट तंत्र डेटा-डुप्लिकेशन को रोक देगा या कोई भी विधि जो किसी सरणी के संदर्भ को स्पष्ट रूप से स्वीकार नहीं करेगी सरणी की एक पूरी प्रति प्राप्त करें?

उत्तर

9

लिखने पर प्रतिलिपि नाम के रूप में सुझाव दिया गया है कि कुछ लिखा गया है जब तक कोई चर कॉपी नहीं किया जा रहा है; जब तक कि चारों ओर पारित चर में एक बाइट नहीं बदला जाता है, PHP स्वचालित रूप से अनियंत्रित डुप्लीकेट से बचने और स्पष्ट संदर्भों का उपयोग किए बिना इस तंत्र के लिए धन्यवाद की देखभाल करता है।

This article विस्तार से बताता है कि यह PHP के स्रोत कोड में कैसे कार्यान्वित किया गया है, और जैसा कि आलेख बताता है, xdebug का उपयोग करके आसानी से चर की जांच कर सकते हैं फ़ंक्शन xdebug_debug_zval के साथ डुप्लिकेट नहीं किया जा रहा है।

इसके अतिरिक्त यहां this answer एसओ पर कॉपी-ऑन-लिखित पर अधिक है।

1

यदि आप उन्हें नहीं बदलते हैं, तो सरणी की प्रतिलिपि नहीं बनाई जाएगी।

+1

आपके त्वरित उत्तर के लिए धन्यवाद, यदि आपके पास समय है तो मैं बहुत आभारी हूं यदि आप इस मामले पर थोड़ा और विस्तार करेंगे। प्राप्तकर्ता सरणी पॉइंटर्स के साथ काम कर रहे हैं? या आप शायद अधिक जानकारी के लिए एक लिंक प्रदान कर सकते हैं जो आपके उत्तर की पुष्टि करता है? – thwd

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