2012-06-06 32 views
4

在在JavaScript中的電流關閉,你可以做這樣的事情調用從封閉

arr.map(function(val) { 
    return typeof val == 'array' ? val.map(arguments.callee) : val.doSomething(); 
}); 

這將遞歸遍歷arr和應用doSomething到每個值。

在PHP中是否有等價於JavaScript的arguments.callee?

回答

5

是否有一個相當於JavaScript的論點。被調用者在PHP?

你必須給函數傳遞給自身:

$func = function($a = 0) use (&$func) { 
    echo "$a\n"; 
    if ($a == 1) { 
     return; 
    } 
    $func(1); 
}; 

$func(); 

/* output: 
0 
1 
*/ 
+0

這是一件好事。缺點是函數必須分配給一個變量。 – ddlshack

0

不完全的要求,但可能更合適:

array_walk_recursive($arr, function (&$val) { 
    $val = doSomething($val); 
});