我正在尝试解决一个使用新功能php7统一变量语法nested()支持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
我没有找到有关此功能的任何解释。在哪里可以找到如何使用它?我看到必须在函数测试中返回函数名称,但是如何传递参数?
答案 0 :(得分:1)
谢谢大家的帮助。就像这样:
<?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
答案 1 :(得分:0)
与rfc相比,这更多的是关于嵌套递归函数或curring的。那个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等乘法函数无法使用空初始值,因此您可以将初始值指定为数组中第一个传递的参数。