PHP और संदर्भ कुछ हद तक 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);
यहाँ यह देखता है कि आप एक संदर्भ चाहते हैं और पहले से ही एक संदर्भ है इसलिए इसे अकेला छोड़ देता है। यह संदर्भ की श्रृंखला भी कर सकता है लेकिन मुझे इस पर संदेह है।