2011-02-12 15 views
9

से func_num_args, func_get_arg और func_get_args के व्यवहार में अंतर मैंने PHP मैनुअल देखा है। लेकिन मैं पिछले संस्करण और PHP के बाद के संस्करणों के बीच व्यवहार में अंतर को समझ नहीं पा रहा हूं। मैं इस कथन समझ में नहीं आता:phc 5.2 से 5.3

Because this function depends on the current scope to determine parameter details, it cannot be used as a function parameter in versions prior to 5.3.0. If this value must be passed, the results should be assigned to a variable, and that variable should be passed.

उत्तर

11

यदि आप उन कार्यों में से किसी एक समारोह को दूसरे कार्य या विधि के परिणाम पास करना चाहते हैं, तो 5.3 से पहले PHP के संस्करणों में आपको पहले एक चर को परिणाम असाइन करना था।

function some_func() { 
    $args = func_get_args(); 
    some_other_func($args); 
} 

यह सीमा PHP 5.3 में हटा दी गई थी और अब आप सीधे परिणाम पास कर सकते हैं।

function some_func() { 
    some_other_func(func_get_args()); 
} 

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

+0

के लिए +1 यह संभवतः कॉलिंग फ़ंक्शन के दायरे और जिस कार्य को पारित किया जा रहा है, उसके बीच वास्तव में उलझन में PHP के साथ कुछ करना है। – BoltClock

+0

कुछ अजीब परिदृश्यों में भी ठीक काम करना प्रतीत होता है: http://codepad.org/MQkQnnJH – cmbuckley

8

इसका मतलब है कि यह 5.2 में अमान्य है:

function foo() { 
    $array = array_map('strtolower', func_get_args()); 
} 
foo('BAR', 'BAZ'); 

यह एक गंभीर त्रुटि के साथ रद्द कर देगा:

PHP Fatal error: func_get_args(): Can't be used as a function parameter

5,3 में

हालांकि, यह वैध कोड है।

+0

गुग्लेबल त्रुटि संदेश – Daniel