Я читал на новых возможностях PHP 5.3, и одной из основных функций являются закрытия.
Если я очень плохо не ошибаюсь, разработчики PHP также:
a) путание закрытий только с анонимными функциями
b) закрытия повреждаются в PHP 5.3.1, в котором я тестирую
Из того, что Википедия говорит, что закрытия являются механизмом анонимных функций плюс привязка переменных объема родителя функции к объему функции. Последняя часть кажется прерванной PHP.
Я проверил ошибки PHP, и ничего не нашел об этом, странно.
Вот то, как я тестирую:
На языках, которые на самом деле реализуют закрытия, это возвращается 2:
def f():
x = 2
return lambda: x
print(f()()) # prints 2
и
alert((function() {
var x = 2;
return function() {
return x;
};
})()()); // alerts 2
Так, я неправильно или?
переменные, унаследованные от внешней области видимости, должны быть перечислены в явном виде. из руководства:
public function getTotal($tax)
{
$total = 0.00;
$callback =
function ($quantity, $product) use ($tax, &$total)
...
Реализация закрытий в PHP немного отличается от того, что можно было бы ожидать, если бы вы привыкли использовать JavaScript. Простой вызов функции () { return x; }
не сработает, так как вы должны воспользоваться оператором use
.