О php7 Синтаксис единой переменной, вложенные функции

Я пытаюсь решить задачу, которая использует новые функции 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

Я не нашел объяснения этой функции. Где я могу найти, как его использовать? Я вижу, что должен возвращать имя функции в тесте функции, но как передать аргумент?

2

Решение

Спасибо всем за помощь. Это что-то вроде этого:

<?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

Другие решения

Это больше о вложенных рекурсивных функциях, или карри, чем этот 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, не будут работать с нулевым начальным значением, вы можете указать начальное значение в качестве первого переданного параметра из массива.

0