Функции закрытия PHP: почему закрытие должно быть анонимной функцией?

Лямбда или анонимная функция — это просто функция без имени.

например

$lambda = function($a, $b) { echo $a + $b; };

Закрытие — это функция, которая имеет доступ к переменным, не указанным
в его списке параметров. В PHP 5.3+ эти переменные указываются после
ключевое слово use и связаны либо по значению, либо по ссылке на
время выполнения определения функции замыкания.

например

$foo = 'hello';
$closure = function() use ($foo) { echo $foo; };
$closure();

В JavaScript все функции являются замыканиями в том смысле, что когда
функции являются вложенными, существует цепочка областей действия, тогда как, например,
самая внутренняя функция имеет доступ к 1. своим локальным переменным, 2.
локальные переменные функции в ее объем, известный как его
объем закрытия, 3. локальные переменные вмещающей области действия
охватывающая область, известная как область закрытия области действия закрытия,
… и так далее, пока мы не сможем также получить доступ к глобальным переменным N.
которые определены в самой верхней области. Переменные, объявленные с
var в самых внутренних областях маскирует те в внешних областях, иначе
если внутренняя переменная имеет то же имя, что и внешняя переменная
область видимости, но не объявлена ​​с помощью переменной var, то переменная из
внешняя сфера используется.

var zero = 0; // global scope
function f1() {
var one = 1; // third-level closure scope of f4
function f2() {
var two = 2; // second-level closure scope of f4
function f3() {
var three = 3; // first-level closure scope of f4
function f4() {
var four = 4;  // local scope of f4
console.log(zero + one + two + three + four);
}
f4();
}
f3();
}
f2();
}
f1();

Это эквивалентно следующему коду PHP:

<?php
$zero = 0; // global scope
$f1 = function() use ($zero) {
$one = 1; // third-level closure scope of f4
$f2 = function() use ($zero, $one) {
$two = 2; // second-level closure scope of f4
$f3 = function() use ($zero, $one, $two) {
$three = 3; // first-level closure scope of f4
$f4 = function() use ($zero, $one, $two, $three) {
$four = 4;  // local scope of f4
echo $zero + $one + $two + $three + $four;
};
$f4();
};
$f3();
};
$f2();
};
$f1();
?>

Все это описано здесь.

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

$foo = 'hello';
function closure() use ($foo) { echo $foo; } // PHP reports a syntax error here
closure();

(Неустранимая ошибка: синтаксическая ошибка, неожиданное T_USE, ожидание ‘;’ или ‘{‘)

2

Решение

Задача ещё не решена.

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

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