Закрыты ли блокировки PHP, или я что-то не хватает?

Я читал о новых функциях PHP 5.3, и одной из основных функций является закрытие .

Если я не ошибаюсь, разработчики PHP:
а) путаные замыкания с анонимными функциями
б) блокировки нарушаются в PHP 5.3.1, в которых я тестирую

Из того, что википедия говорит, что закрытие – это механизм анонимных функций плюс привязка переменных сферы родительской функции к области действия. Последняя часть кажется разбитой в PHP.

Я проверил ошибки PHP, и ничего не нашел об этом, как ни странно.

Вот как я тестирую:

<?php function getFun() { $x = 2; return function() { return $x; }; } $f = getFun(); // getFun()(); doesn't work -.- var_dump($f()); // $f() == null 

В языках, на самом деле реализующих закрытие, он возвращает 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. Просто вызывающая function () { return x; } function () { return x; } не будет работать, так как вы должны use инструкцию use .