С функциями в 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? или он должен быть присвоен переменной в качестве замыкания первым.
Ваш пример будет работать в PHP 7+. Перед этим вам нужно использовать временные переменные или call_user_func()
(но это было бы довольно некрасиво).
Других решений пока нет …