2011-10-24 10 views
16

मैं निम्नलिखित की तरह कुछ करने के लिए कोशिश कर रहा हूँ:क्या PHP में स्वयं से किसी अज्ञात फ़ंक्शन का संदर्भ देना संभव है?

// assume $f is an arg to the wrapping function 
$self = $this; 
$func = function() use($f, $ctx, $self){ 

    $self->remove($func, $ctx); // I want $func to be a reference to this anon function 

    $args = func_get_args(); 
    call_user_func_array($f, $args); 
}; 

यह एक ही समारोह के साथ से समारोह $ समारोह करने के लिए सौंपा संदर्भित करने के लिए संभव है?

+0

वाह, मेरी इच्छा है कि मैं इन सभी को जवाब के रूप में चिह्नित कर सकूं! – Andrew

+0

और मेरी इच्छा है कि उत्तर में से एक उत्तर संदर्भ निर्माण और असाइनमेंट में देरी से विस्तृत होगा। – mario

+2

@ मारियो और मेरी इच्छा है कि आप लोगों को यहां दिए गए उत्तरों के बारे में शिकायत करने के बजाय, एक ** ** ** सोचें सही है। – Neal

उत्तर

23

कर

$func = function() use (/*your variables,*/ &$func) { 
    var_dump($func); 
    return 1; 
}; 

http://codepad.viper-7.com/cLd3Fu

+0

हम * नाम * अज्ञात फ़ंक्शन के बिना इसे कैसे कर सकते हैं? – Pacerier

+0

@Pacerier मुझे यकीन नहीं है कि यह संभव है। –

4

हाँ, आप कर सकते हैं

इस उदाहरण देखें प्रयास करें: http://php.net/manual/en/functions.anonymous.php#105564 उदाहरण से


कोड:

<?php 
    $fib = function($n) use(&$fib) { 
     if($n == 0 || $n == 1) return 1; 
     return $fib($n - 1) + $fib($n - 2); 
    }; 

    echo $fib(2) . "\n"; // 2 
    $lie = $fib; 
    $fib = function(){die('error');};//rewrite $fib variable 
    echo $lie(5); // error because $fib is referenced by closure 

?> 
4

हां, यह संभव है यदि आप use संदर्भ द्वारा एक चर। उदाहरण के लिए:

$func = function($i) use(&$func) { 
    if ($i <= 0) { 
     return; 
    } 
    echo "Countdown: $i.\n"; 
    $func($i - 1); 
}; 

$func(3); 
0

यह और भी सरल और लचीला हो सकता है। बस

$func = function($param1, $paramN) { 
    // ... code before recursion entry point 
    // dive deeper using magic constant 
    call_user_func_array(__FUNCTION__, [$param1, $paramN]); 
}; 
संबंधित मुद्दे