4

在javascript中,你可以做这样的事情

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

这将递归迭代arr并应用于doSomething每个值。

PHP 中是否有与 JavaScript 的 arguments.callee 等价的东西?

4

3 回答 3

5

PHP 中是否有与 JavaScript 的 arguments.callee 等价的东西?

您必须将函数传递给自身:

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

$func();

/* output:
0
1
*/
于 2012-06-06T19:01:07.283 回答
2

我不相信arguments.callee 有等价物。如果你真的想要 php 中的递归 lambda,总是有 y 组合模式:http ://en.wikipedia.org/wiki/Fixed-point_combinator#Y_combinator

于 2012-06-06T18:48:28.787 回答
0

不完全按照要求,但可能更合适:

array_walk_recursive($arr, function (&$val) {
    $val = doSomething($val);
});
于 2012-06-06T18:49:07.113 回答