在在JavaScript中的電流關閉,你可以做這樣的事情調用從封閉
arr.map(function(val) {
return typeof val == 'array' ? val.map(arguments.callee) : val.doSomething();
});
這將遞歸遍歷arr
和應用doSomething
到每個值。
在PHP中是否有等價於JavaScript的arguments.callee?
在在JavaScript中的電流關閉,你可以做這樣的事情調用從封閉
arr.map(function(val) {
return typeof val == 'array' ? val.map(arguments.callee) : val.doSomething();
});
這將遞歸遍歷arr
和應用doSomething
到每個值。
在PHP中是否有等價於JavaScript的arguments.callee?
是否有一個相當於JavaScript的論點。被調用者在PHP?
你必須給函數傳遞給自身:
$func = function($a = 0) use (&$func) {
echo "$a\n";
if ($a == 1) {
return;
}
$func(1);
};
$func();
/* output:
0
1
*/
我不相信有相當於arguments.callee。如果你真的想在PHP遞歸的λ,總有Y組合模式:http://en.wikipedia.org/wiki/Fixed-point_combinator#Y_combinator
http://php100.wordpress.com/2009/04/13/php-y-combinator/ – ddlshack
不完全的要求,但可能更合適:
array_walk_recursive($arr, function (&$val) {
$val = doSomething($val);
});
這是一件好事。缺點是函數必須分配給一個變量。 – ddlshack