2011-09-07 13 views
5

द्वारा पारित मूलभूत मूल्यों पीएचपी के मैनुअल में विसंगतियों के कारण मैं सिर्फ कुछ स्पष्टीकरण के बारे में पूछताछ कर रहा हूँ (के रूप में मैं से पहले के बारे में पोस्ट किया है)। मुझे लगता है इस का अर्थ है कि निम्न सिंटैक्स स्वीकार्य है अबPHP मैनुअल का स्पष्टीकरण; संदर्भ

Note: As of PHP 5, default values may be passed by reference.

,:

फ़ंक्शन आर्ग्युमेंट पेज (http://ca2.php.net/manual/en/functions.arguments.php) निम्न टिप्पणी है

function foo(&$bar = null){ 
    // ... 
} 

हालांकि, फिर अन्य विसंगतियों के कारण, मैं सोच रहा था कि शायद यह किसी और चीज से संबंधित है।

+0

हम्म के बारे में अधिक सटीक होना चाहिए, जाहिर है कि आप PHP में संदर्भ द्वारा पारित एक चर के लिए डिफ़ॉल्ट सेट कर सकते हैं। मैं ऐसे मामले के बारे में नहीं सोच सकता जहां यह कोई संकेत नहीं होगा कि आप कुछ गलत कर रहे हैं। –

+1

धन्यवाद @Tim - मैं हल करने/अनुरोध मार्गों को मान्य एक दोहरी ड्यूटी समारोह में यह प्रयोग कर रहे। समाधान करते समय, संदर्भ द्वारा एक अतिरिक्त तर्क पारित किया जाता है, और हल किए गए पैरामीटर के साथ पॉप्युलेट किया जाता है। सत्यापन करते समय, कोई तर्क आवश्यक नहीं है क्योंकि आपको केवल बुलियन रिटर्न मान की आवश्यकता है। यह 'preg_match' के विपरीत नहीं है। – Dan

+0

आह, यह समझ में आता है। –

उत्तर

4

इसका मतलब है कि PHP 4 में, संदर्भ द्वारा पारित तर्क के लिए कोई डिफ़ॉल्ट मान का उपयोग कर एक पार्स त्रुटि में परिणाम होगा:

Parse error: syntax error, unexpected '=', expecting ')' in ... 

Demo

PHP5 में, जब कोई तर्क पारित हो जाता है, अपने कार्य एक होगा सामान्य स्थानीय चर $bar बुलाया null के लिए शुरू।

यह शायद करने के लिए reworded किया जाना चाहिए:

Note: As of PHP 5, function declarations may define a default value for argument passed by reference.

+0

पर प्रश्न खोल सकते हैं, मैंने यह बहुत कुछ पाया; शब्द * हल्के से उलझन में है - यह आपको विश्वास दिलाता है कि आंखों की तुलना में कहीं अधिक है। Rewording पर सहमत हैं; उल्लेख किया है कि: http://chat.stackoverflow.com/transcript/message/15381785#15381785 – Dan

+0

शब्द यह प्रतीत होता है कि आप किसी भी तरह से 'फ़ंक्शन foo ($ bar = और $ कुछ) कर सकते हैं जो कि बेतुका है; -) –

4

इसका मतलब है कि जब आप बार

$bar = "newvalue"; 
समारोह, वर्ष (मूल एक) में

बदल भी प्रभावित हो जाएगा

<?php 
function foo(&$bar = null){ 
    $bar = 'newval'; 
} 

$bar = 'oldval, will be changed'; 
foo($bar); 
echo $bar; //RETURNS newval 

इसलिए यदि आप किसी भी चर संदर्भ द्वारा पारित बदलने के लिए, यह नहीं करता है ' टी भले ही आप कहीं बदल गया है, स्रोत एक परिवर्तित हो जाता है, भी

http://sandbox.phpcode.eu/g/51723

+0

धन्यवाद @genesis - मैं समझता हूं कि सामान्य रूप से संदर्भों की इच्छित कार्यक्षमता है। सवाल संदर्भ तर्क और डिफ़ॉल्ट के नोडस्क्रिप्ट लिखित संदर्भ से संबंधित है।जैसा कि मैंने कहा, मुझे लगता है कि इसका मतलब है कि संदर्भ द्वारा स्वीकार किए गए तर्कों में डिफ़ॉल्ट मान भी हो सकते हैं; मैं सोच रहा था कि क्या यह शायद किसी अन्य (* अन्यथा अनियमित शायद *) सुविधा या साइड इफेक्ट को संदर्भित करता है। – Dan

+0

@ ब्रैकवर्क्स: मुझे ऐसा नहीं लगता है – genesis

+0

न तो मैं करता हूं, लेकिन मैनुअल ने मुझे पहले आश्चर्यचकित कर दिया है। तर्क अकेले उस पृष्ठ पर उचित विवरण में जाता है (* और अन्य खंड; "संदर्भ बताए गए", आदि *) तर्क द्वारा संदर्भ पारित करने के बारे में। ऐसा लगता है कि चेतावनी या तो अनावश्यक है, या किसी और चीज से संबंधित है जिसे मैं नहीं देख रहा हूं। आप जानते हैं कि मेरा क्या मतलब है? – Dan

0

मुझे लगता है कि एकमात्र कारण यह अस्तित्व एक समारोह कॉल में पीछे वाले पैरामीटर को छोड़ने के लिए अनुमति देने के लिए है

function test(&$bar = 10) 
{ 
    echo " '$bar' "; 
    $bar = $bar*2; 
    echo " '$bar' "; 
} 

test($aaa);  // prints '' '0'  (NULL as string, NULL*2) 
echo $aaa;  // prints 0   ($aaa is set to NULL*2) 
echo "<br>"; 

$bbb = 6; 
test($bbb);  // prints '6' '12' (6, 6*2) 
echo $bbb;  // prints 12   ($bbb is set to 6*2) 
echo "<br>"; 

test();  // prints '10' '20' 
// (uses the default value since the argument was skipped, so: 10, 10*2) 

तो कारण imho यह अस्तित्व है केवल संभावना $ बार समारोह गुंजाइश अंदर कुछ डिफ़ॉल्ट मान पर सेट है करने के लिए जब आप समारोह की कॉल

+०१२३५१६४१०६१ में अग्रणी पैरामीटर को छोड़

यदि ऐसा है तो मैं आपके साथ सहमत हूं, मैनुअल इस

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