关于 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 这样的乘法函数不能使用空初始值,您可以将初始值指定为数组中第一个传递的参数。
我正在尝试解决一个使用新函数的任务 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 这样的乘法函数不能使用空初始值,您可以将初始值指定为数组中第一个传递的参数。