2011-10-24 28 views
16

Tôi đang cố gắng để làm một cái gì đó như sau:Có thể tham chiếu một hàm ẩn danh từ bên trong chính nó trong PHP không?

// 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); 
}; 

Có thể tham khảo các chức năng được gán cho $ func từ với chức năng giống nhau không?

+0

Ồ, tôi ước mình có thể đánh dấu tất cả những câu trả lời này là câu trả lời! – Andrew

+0

Và tôi muốn một trong các câu trả lời sẽ được xây dựng dựa trên việc tạo tham chiếu và phân công trì hoãn. – mario

+2

@mario và tôi ước bạn sẽ tự trả lời bằng một ** bạn nghĩ là đúng, thay vì phàn nàn về câu trả lời mà mọi người đặt ở đây. – Neal

Trả lời

23

Hãy thử làm

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

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

+0

Làm thế nào chúng ta có thể làm điều đó mà không cần phải * tên * chức năng ẩn danh? – Pacerier

+0

@Pacerier Tôi không chắc chắn điều đó là có thể. –

4

Có bạn có thể

Xem ví dụ này: http://php.net/manual/en/functions.anonymous.php#105564


Mã từ ví dụ:

<?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

Có, có thể nếu bạn use biến bằng cách tham chiếu. Ví dụ:

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

$func(3); 
0

Nó thậm chí còn đơn giản và linh hoạt hơn. Chỉ cần

$func = function($param1, $paramN) { 
    // ... code before recursion entry point 
    // dive deeper using magic constant 
    call_user_func_array(__FUNCTION__, [$param1, $paramN]); 
}; 
Các vấn đề liên quan