पीएचपी और संदर्भ कुछ हद तक unintuitive हैं। यदि सही जगहों पर उचित संदर्भों का उपयोग किया जाता है तो बड़े प्रदर्शन सुधार प्रदान कर सकते हैं या बहुत बदसूरत कामकाज और असामान्य कोड से बच सकते हैं।
निम्नलिखित कोई त्रुटि उत्पन्न करेगा:
function f(&$v){$v = true;}
f(&$v);
function f($v){$v = true;}
f(&$v);
इनमें से कोई नहीं विफल के रूप में वे नीचे नियमों का पालन करें, लेकिन इसमें कोई शक नहीं हटाया या विरासत भ्रम का एक बहुत रोकने के लिए अक्षम किया गया है हो सकता है।
यदि उन्होंने काम किया है, तो दोनों में संदर्भ में अनावश्यक रूपांतरण शामिल है और दूसरे में एक स्कॉप्ड निहित चर पर वापस एक अनावश्यक रूपांतरण शामिल है।
दूसरा ऐसा संभव था जो संदर्भ को संदर्भित करने के उद्देश्य से कोड को पारित करने की अनुमति देता है। यह रखरखाव के लिए बेहद बदसूरत है।
यह कोई कार्य नहीं करेगा:
function f($v){$v = true;}
$r = &$v;
f($r);
अधिक विशेष रूप से, यह संदर्भ वापस एक सामान्य चर में के रूप में आप एक संदर्भ के लिए नहीं पूछा है बदल जाता है।
यह काम करेगा:
function f(&$v){$v = true;}
f($v);
यह देखता है कि आप एक गैर संदर्भ से गुजर रहे हैं लेकिन चाहते हैं एक संदर्भ तो एक संदर्भ में बदल जाता।
इसका क्या अर्थ है कि आप किसी फ़ंक्शन के संदर्भ को पारित नहीं कर सकते हैं, जहां संदर्भ को उन क्षेत्रों में से एक बनाने के लिए स्पष्ट रूप से नहीं पूछा जाता है जहां PHP प्रकार गुजरने पर सख्त है या इस मामले में मेटा प्रकार के अधिक ।
आप और अधिक गतिशील व्यवहार की जरूरत है इस काम करेगा:
function f(&$v){$v = true;}
$v = array(false,false,false);
$r = &$v[1];
f($r);
यहाँ यह देखता है कि आप एक संदर्भ चाहते हैं और पहले से ही एक संदर्भ तो यह अकेला छोड़ देता है है। यह संदर्भ भी श्रृंखला कर सकता है लेकिन मुझे शक है।
संबंधित: [PHP चेतावनी: कॉल-टाइम पास-बाय-रेफरेंस को बहिष्कृत कर दिया गया है] (http://stackoverflow.com/q/4665782/2157640) – Palec