2012-08-01 19 views
5

जिस फ़ंक्शन को मैं call_user_func से कॉल कर रहा हूं उसे FALSE वापस करना है। तो अगर कॉल करने योग्य अमान्य है तो मैं त्रुटियों का पता कैसे लगा सकता हूं?क्या होगा यदि call_user_func को झूठी वापसी की जानी चाहिए?

(साइड नोट: उन्होंने त्रुटि कोड को वापस करने के बजाय यह अपवाद क्यों नहीं फेंका? या क्या "पकड़ने" त्रुटियों का कोई तरीका है? मुझे एक त्रुटि संभाल है। क्या मुझे यह मेरे लिए अपवाद फेंकना चाहिए ?)

+0

इसके अलावा, मैं कसम खाता हूँ मैं इस खोज करने के लिए कोशिश की और सिर्फ मेरे वहाँ पहुँचने के लिए जादुई शब्द नहीं मिल सका। यदि आप इसे जानते हैं तो मुझे उचित प्रश्न पर निर्देशित करना बहुत अच्छा होगा। –

+4

आप पहले ['is_callable'] (http://www.php.net/manual/en/function.is-callable.php) के साथ परीक्षण कर सकते हैं। – bfavaretto

+0

"अवैध" का क्या अर्थ है? –

उत्तर

10

यदि आप यह देखना चाहते हैं कि फ़ंक्शन या विधि वास्तव में मौजूद है या नहीं, तो आप call_user_func पर कॉल करने से पहले is_callable का उपयोग कर सकते हैं। आप आसानी से पुनः उपयोग के लिए एक समारोह में पूरी बात लपेट कर सकते हैं:

function call_uf($fn) { 
    if(is_callable($fn)) { 
     return call_user_func($fn); 
    } else { 
     throw new Exception("$fn is not callable"); 
    } 
} 

आप के बारे में एक टिप्पणी में पूछा क्यों पीएचपी अपवाद उपयोग करने के बजाय त्रुटियों को जन्म देती है। मुझे लगता है कि ऐसा इसलिए है क्योंकि अपवाद केवल PHP5 में पेश किए गए थे, इसलिए अधिकांश PHP फ़ंक्शन त्रुटि रिपोर्टिंग पर भरोसा करते हैं।

आंतरिक पीएचपी कार्यों मुख्य रूप से उपयोग करने Error reporting, केवल आधुनिक Object oriented एक्सटेंशन अपवाद का उपयोग: वहाँ, कि चारों ओर एक रास्ता के रूप में the manual इंगित करता है लगता है। हालांकि, ErrorException के साथ अपवादों में त्रुटियों का अनुवाद किया जा सकता है।

+0

मेरी राय में, कभी-कभी पीछे की संगतता को केवल जाने की आवश्यकता होती है। हालांकि, मैं इतनी खुदाई कर रहा हूं कि 'त्रुटि अपवाद' व्यवसाय। धन्यवाद! –

1

उन्होंने अपवाद नहीं फेंक दिया क्योंकि उन्हें इस कार्य को पिछड़ा संगत रखने की आवश्यकता है। पुराने PHP संस्करणों में कोई अपवाद नहीं था, PHP < 5.

बूलियन रिटर्न प्रकार फ़ंक्शन विफलता रिपोर्ट के लिए "आरक्षित" था। आपको क्या करना है यह पता लगाना है कि फ़ंक्शन विफल क्यों होगा। मुझे लगता है कि यह असफल तर्कों के लिए असफल होने का एकमात्र कारण है।

हो सकता है कि एक सुरक्षित कॉल में यह wraping आप क्या चाहते हैं करना होगा:

function safe_call_user_func() 
{ 
    $nargs = func_num_args(); 
    $args = func_get_args(); 
    if ($nargs == 0) 
    throw new RuntimeException('Require at least the callback param'); 
    if (!is_callable($args[0]) 
    throw new InvalidArgumentException('Callback param is invalid'); 
    return call_user_func_array(array_shift($args), $args); 
} 
संबंधित मुद्दे