javascript — вложенные функции, функции первого класса в переполнении стека

С функциями в Python, Js и PHP все они говорят, что они являются объектами первого класса. Я хочу убедиться, что я правильно понял пример PHP. Есть ли другой способ переноса этого кода на PHP?

Python 3:

def a():
print("init")
def b():
print("inside")
def c():
print("inception")
return c
return ba()()()

Результат

init
inside
inception
[Finished in 0.1s]

Javascript (узел):

function a() {
console.log("init")
function b()
{
console.log("inside")
function c()
{
console.log("inception")
}
return c
}
return b
}

s = a()()()

Результат

init
inside
inception
[Finished in 0.2s]

PHP 5.5:

function a()
{
echo "init".PHP_EOL;
$x = function()
{
echo "inside".PHP_EOL;
$y = function()
{
echo "inception".PHP_EOL;
};
echo "b".PHP_EOL;
return $y;
};
return $x;
}

a()()();

Результат

Parse error: syntax error, unexpected '('

давайте попробуем еще раз в PHP

$b = a();
$c = $b();
$c();

Результат

init
inside
inception
[Finished in 0.1s]

Это единственный способ вызвать вложенную функцию в PHP?

ОБНОВИТЬ Последующий вопрос: в PHP вы можете вернуть функцию так же, как в Python или JS? или он должен быть присвоен переменной в качестве замыкания первым.

1

Решение

Ваш пример будет работать в PHP 7+. Перед этим вам нужно использовать временные переменные или call_user_func() (но это было бы довольно некрасиво).

https://wiki.php.net/rfc/uniform_variable_syntax

2

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

Других решений пока нет …

По вопросам рекламы [email protected]