Закрытия PHP повреждаются, или я пропускаю что-то?

Я читал на новых возможностях 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

Так, я неправильно или?

8
задан Prody 1 January 2010 в 19:21
поделиться

2 ответа

переменные, унаследованные от внешней области видимости, должны быть перечислены в явном виде. из руководства:

public function getTotal($tax)
{
    $total = 0.00;

    $callback =
        function ($quantity, $product) use ($tax, &$total)
...
12
ответ дан 5 December 2019 в 11:25
поделиться

Реализация закрытий в PHP немного отличается от того, что можно было бы ожидать, если бы вы привыкли использовать JavaScript. Простой вызов функции () { return x; } не сработает, так как вы должны воспользоваться оператором use.

.
3
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: