2009-11-07 5 views
5

मान लीजिए मैंने निम्नलिखित समारोह: एक कॉलबैक समारोह के रूप में * ऑपरेटर का उपयोग करना संभव हैक्या मैं PHP में फ़ंक्शन कॉलबैक के रूप में ऑपरेटरों का उपयोग कर सकता हूं?

function mul() 
{ 
    return array_reduce(func_get_args(), '*'); 
} 

है? क्या कोई और तरीका है?

+1

कम से कम। उपयोगी। सवाल। नाम। कभी। ;) –

+0

फिक्स्ड टाइटल, अगर आपको यह पसंद नहीं है तो वापस लौटने के लिए स्वतंत्र महसूस करें –

उत्तर

8

इस विशिष्ट मामले में, array_product() का उपयोग करें:

function mul() { 
    return array_product(func_get_args()); 
} 

सामान्य स्थिति में? नहीं, आप किसी ऑपरेटर को फ़ंक्शन में कॉलबैक के रूप में पास नहीं कर सकते हैं। आपको कम से कम एक समारोह में लपेट करना होगा:

function mul() { 
    return array_reduce(func_get_args(), 'mult', 1); 
} 

function mult($a, $b) { 
    return $a * $b; 
} 
+0

अच्छा, मैंने कभी यह फ़ंक्शन नहीं देखा, यह सोचकर कि यह एक आम ऑपरेशन है, मुझे इसका उपयोग करने का मौका कभी नहीं मिला – RageZ

5

कोड आप काम नहीं होगा प्रदान की है, लेकिन आप कुछ इसी तरह कर सकते हैं।

function mul() 
{ 
    return array_reduce(func_get_args(), create_function('$a,$b', 'return "$a * $b')); 
} 

create_function आप काम करने के लिए कोई वास्तविक समारोह बनाने के लिए लघु समारोह (एक लाइनर), यदि आपका समारोह अब तो एक बयान हो रही है यह बेहतर है बनाने के लिए अनुमति देता है।

कृपया यह भी ध्यान दें कि सिंगल कोट महत्वपूर्ण है क्योंकि आप डॉलर के प्रतीक का उपयोग कर रहे हैं ताकि आप नहीं चाहते कि PHP उन्हें बदलने का प्रयास करें।

1

यदि मैं अपने समारोह को परिभाषित करने और फिर इस कार्य करें:

 
$arr = array(2,3,4,5,6); 
mul($arr); 

मैं निम्न चेतावनी मिल:

 
Warning: array_reduce(): The second argument, '*', should be a valid callback in /home/azanar/Documents/Projects/testbed/test.php on line 6 

अन्य दो यहाँ जवाब ऐसा करने के एक काम जिस तरह से संबोधित कर रहे पर अच्छा प्रदर्शन करने। हालांकि, यह आम तौर पर एक अच्छी आदत है, जब आपको आश्चर्य होता है कि किसी विशेष भाषा में कुछ अनुमति है या नहीं, तो बस कोशिश करें और देखें कि क्या होता है। आप कुछ भाषाओं की अनुमति देकर आश्चर्यचकित हो सकते हैं, और यदि वे नहीं करते हैं, तो वे लगभग हमेशा आपको कुछ प्रकार का सार्थक त्रुटि संदेश देने जा रहे हैं।