关于 php7 统一变量语法,嵌套函数

About php7 Uniform Variable Syntax, nested functions

我正在尝试解决一个使用新函数的任务 php7 统一变量语法嵌套 () 支持 foo()() (https://wiki.php.net/rfc/uniform_variable_syntax)。 我需要为此代码编写功能测试:

$sum = function($a, $b)  { return $a + $b; };
test(6)(2)(3)($sum);    // 11
test(3)(1)($sum);       // 4
test(3)(3)('pow');      // 27

我没有找到关于此功能的任何解释。我在哪里可以找到它的使用方法?我看到我必须在函数测试中 return 函数名称,但是如何传递参数?

感谢大家的帮助。是这样的:

<?php

function test($a) {
    echo '<br/>';
    $arr[] = $a;
    return $mf = function($b) use(&$mf, &$a, &$arr) {
        if(gettype($b) == 'object') {
            echo(array_reduce($arr, $b));
        } elseif (gettype($b) == 'string') {
            if($b == 'pow') {
                echo array_reduce($arr, function ($carry, $a) {
                    return !empty($carry) ? pow($carry, $a) : $a;
                });
            }
        } elseif (gettype($b) == 'integer') {
            $arr[] = $b;
        }
        return $mf;
    };
}

$sum = function($a, $b)  { return $a + $b; };
test(6)(2)(3)($sum);    // 11
test(3)(1)($sum);       // 4
test(3)(3)('pow');      // 27

与 rfc 相比,这更多地是关于嵌套递归函数或柯里化。该 rfc 刚刚启用了支持它的语法。

这会使用递归,直到您传递一个可调用对象:

function test($var) {
    $values = [$var];
    $function = function($callback) use (&$values, &$function) {
        if (is_callable($callback)) {
            return array_reduce(array_slice($values, 1), $callback, $values[0]);
        }
        $values[] = $callback;
        return $function;
    };
    return $function;
}

因为您的函数需要两个参数,但您的嵌套可以有无限个参数,所以最好使用数组和数组归约。

但是,由于像 pow 这样的乘法函数不能使用空初始值,您可以将初始值指定为数组中第一个传递的参数。