Область действия переменных с функцией внутри функции?

В Python у вас может быть следующее:

def foo(param1, param2):
    def bar():
        print param1 + param2
    bar()

Однако у меня возникают некоторые трудности с этим поведением в PHP. Я ожидаю, что это будет работать следующим образом:

function foo($param1, $param2)
{
    function bar()
    {
        echo $param1 + $param2;
    }
    bar();
}

Но это не удается. Итак, я прочитал кое-что о замыканиях (это называется замыканием, не так ли? Насколько я знаю, это в Python).А в документации по phpоб анонимных функциях (которые, по их словам, были реализованы как замыкания) вам предлагается использовать выражение use() следующим образом:

function foo($param1, $param2)
{
    function bar() use($param1, $param2)
    {
        echo $param1 + $param2;
    }
    bar();
}

Но это все равно не работает. Поэтому я изменил ее на PHP-анонимную функцию примерно так:

function foo($param1, $param2)
{
    $bar = function() use($param1, $param2)
    {
        echo $param1 + $param2;
    };
    $bar();
}

Это действительно работает, но выглядит очень уродливо. Я что-то пропустил? Могу ли я улучшить это каким-либо образом? Или мне просто придется использовать «уродливый» способ?

(я не ищу обсуждения полезности замыканий)

7
задан Daan Timmer 1 June 2012 в 14:35
поделиться