2011-11-08 22 views
13

PHP में, फ़ंक्शन को परिभाषित करते समय आप कितने तर्क बना सकते हैं? यह ऐसा कुछ नहीं है जो मैं कर रहा हूं, सिर्फ एक प्रश्न जो एक सहकर्मी के साथ चर्चा करते समय पॉप अप हुआ :)PHP फ़ंक्शंस - तर्कों की अधिकतम संख्या

क्या यह पूरी तरह से स्मृति सीमा से नीचे होगा? प्रभावी रूप से असीमित?

+2

आप परीक्षण क्यों नहीं करते? http://stackoverflow.com/questions/8049673/php- कार्यक्षमता- अधिकतम- संख्या-of-arguments/8049856#8049856 – hakre

+0

मैं बहुत आभारी हूं कि उसने नहीं किया, बल्कि इसके बजाय पूछा। आप देखते हैं, इस तरह हम सभी को भी नहीं करना है। एसओ ने फिर से समुदाय को अद्भुत तरीके से सेवा दी है। –

उत्तर

9

फ़ंक्शन के लिए तर्क एक स्टैक पर धकेल दिए जाते हैं, जिसके बाद फ़ंक्शन को कॉल किया जाता है जो बदले में स्टैक पढ़ता है और पैरामीटर के रूप में उन मानों का उपयोग करता है।

तब तक जब तक स्टैक पूर्ण नहीं होता है, आप पैरामीटर जोड़ना जारी रख सकते हैं, लेकिन यह स्थिति पर निर्भर करेगा, और डिज़ाइन-टाइम पर आपको स्टैक आकार नहीं पता होगा।

लेकिन मुझे उम्मीद है कि यह एक तकनीकी चर्चा शुद्ध है और आपको इसकी आवश्यकता नहीं है IRL। ;-)

+0

हाहा, नहीं, जैसा कि मैंने उल्लेख किया है आईआरएल नहीं है - पूरी तरह से तकनीकी ramblings :-) – bagwaa

11

कोई सीमा नहीं है। और फ़ंक्शन परिभाषा में सभी तर्क लिखने से बचने के लिए आप हमेशा func_get_args(), func_get_arg() और func_num_args() का उपयोग कर सकते हैं।

3

मुझे वास्तव में सीमाएं नहीं हैं, लेकिन किसी भी तरह से, यदि आप बहुत से तर्कों के साथ कोई फ़ंक्शन बनाते हैं तो आपका कोड इसे पढ़ने में इतना आसान नहीं होगा।

$option = array(
    'arg_1' => 'value', 
    'arg_2' => 'value', 
    .... 
    'arg_x' => 'value' 
); 

function function_name($args = "") 
{ 
    $defaults = array(
     'arg_1' => 'default_value', 
     'arg_2' => 'default_value' 
     .... 
     'arg_x' => 'default_value' 
    ); 

    $arguments = array_merge($defaults, (array)$args); 
    extract($arguments); 

    echo $arg_1; 
    echo $arg_x; 
} 
4

एक समारोह तर्क है कि आप बना सकते हैं की अधिकतम संख्या क्या है परिभाषित करने के लिए जब: मामले में आप आप ऐसा कुछ कर सकते हैं कई समारोह तर्क जोड़ना चाहेंगे?

मुझे निश्चित संख्या के रूप में तर्कों की संख्या में विशिष्ट सीमा से अवगत नहीं है। एक त्वरित परीक्षण से पता चला कि मुझे 255 555 तर्कों के साथ एक समारोह को परिभाषित करने में कोई समस्या नहीं थी। फ़ंक्शन को परिभाषित करने और इसे निष्पादित करने में कुछ समय लगता है। हालांकि, यह काम करता है।

जैसा कि संख्या उठाई गई थी, मैं एक स्मृति सीमा में चल रहा था जो स्ट्रिंग सीमा हो सकती है। आप टेस्ट-केस में सुधार करना चाहते हैं, बफर का उपयोग कर सकते हैं और फाइल को क्रमशः डिस्क में सहेज सकते हैं और इसमें शामिल कर सकते हैं:

$count = 255555; 

$code = 'function test(%s) {return 1;}; return test();'; 

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0'; 

echo eval(sprintf($code, $params)); 
संबंधित मुद्दे