2013-02-27 186 views
6

मैंने अपने कुछ PHP अनुप्रयोगों को बनाने और निर्माण करने के लिए अपनी यात्रा में देखा है, & वर्रों, = और कक्षा के नामों के सामने प्रतीक।PHP संदर्भ: एक समझ

मैं समझता हूं कि ये PHP संदर्भ हैं, लेकिन मैंने जो दस्तावेज़ देखे हैं और देखा है, वे इसे समझाने या भ्रमित करने के तरीके की व्याख्या नहीं करते हैं। आप निम्नलिखित उदाहरणों को कैसे समझा सकते हैं जिन्हें मैंने उन्हें और अधिक समझने योग्य बनाने के लिए देखा है।

public static function &function_name(){...} 

    $varname =& functioncall(); 

    function ($var, &$var2, $var3){...} 

बहुत सराहना की

+0

इसे देखें http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php '= और संदर्भ 'ब्लॉक। – Winston

उत्तर

4

मान लीजिए कि आप दो कार्यों

$a = 5; 
function withReference(&$a) { 
    $a++; 
} 
function withoutReference($a) { 
    $a++; 
} 

withoutReference($a); 
// $a is still 5, since your function had a local copy of $a 
var_dump($a); 
withReference($a); 
// $a is now 6, you changed $a outside of function scope 
var_dump($a); 

करते हैं तो, संदर्भ द्वारा तर्क गुजर समारोह समारोह दायरे के बाहर यह संशोधित करने के लिए अनुमति देता है।

अब दूसरा उदाहरण।

आप एक समारोह जो एक संदर्भ रिटर्न

class References { 
    public $a = 5; 
    public function &getA() { 
     return $this->a; 
    } 
} 

$references = new References; 
// let's do regular assignment 
$a = $references->getA(); 
$a++; 
// you get 5, $a++ had no effect on $a from the class 
var_dump($references->getA()); 

// now let's do reference assignment 
$a = &$references->getA(); 
$a++; 
// $a is the same as $reference->a, so now you will get 6 
var_dump($references->getA()); 

// a little bit different 
$references->a++; 
// since $a is the same as $reference->a, you will get 7 
var_dump($a); 
+1

@ मार्को डी उपर्युक्त के लिए बहुत धन्यवाद, मैं समझना चाहता था कि अगर यह किसी भी मौजूदा परियोजनाओं के लिए कोई उपयोग था और यदि भविष्य के लिए कोई दिमाग नहीं है। –

0

संदर्भ कार्यों

$name = 'alfa'; 
$address = 'street'; 
//declaring the function with the $ tells PHP that the function will 
//return the reference to the value, and not the value itself 
function &function_name($what){ 
//we need to access some previous declared variables 
GLOBAL $name,$address;//or at function declaration (use) keyword 
    if ($what == 'name') 
     return $name; 
    else 
     return $address; 
} 
//now we "link" the $search variable and the $name one with the same value 
$search =& function_name('name'); 
//we can use the result as value, not as reference too 
$other_search = function_name('name'); 
//any change on this reference will affect the "$name" too 
$search = 'new_name'; 
var_dump($search,$name,$other_search); 
//will output string 'new_name' (length=8)string 'new_name' (length=8)string 'alfa' (length=4) 

आमतौर पर आप वस्तुओं है कि एक ही इंटरफ़ेस कार्यान्वित के साथ विधि का उपयोग करें, और आप वस्तु आप चाहते हैं का चयन करना चाहते है अगले के साथ काम करने के लिए।

संदर्भ द्वारा पासिंग:

function ($var, &$var2, $var3){...} 

मुझे यकीन है कि आप उदाहरण देखा हूँ, इसलिए मैं सिर्फ कैसे और कब इसका इस्तेमाल करने का तरीका बताएंगे। मूल परिदृश्य तब होता है जब आपके पास एक बड़ा तर्क है कि आप किसी मौजूदा ऑब्जेक्ट/डेटा पर आवेदन करना चाहते हैं, और आप इसकी अधिक प्रतियां (स्मृति में) बनाना नहीं चाहते हैं। उम्मीद है कि यह मदद करता है।

+0

इसके लिए बहुत धन्यवाद। –