Подтвердить что ты не робот

Использовать ключевое слово в функциях - PHP

Возможный дубликат:
В Php 5.3.0 что такое функция "Использовать" идентификатор? Должен ли его использовать системный программист?

Я изучал Closures в PHP, и именно это привлекло мое внимание:

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

        $callback =
            function ($quantity, $product) use ($tax, &$total)
            {
                $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                    strtoupper($product));
                $total += ($pricePerItem * $quantity) * ($tax + 1.0);
            };

        array_walk($this->products, $callback);
        return round($total, 2);
    }

И кто-нибудь, пожалуйста, дайте мне объяснение об использовании use в этом коде.

function ($quantity, $product) use ($tax, &$total)

Когда я просматриваю use в PHP, он находит ключевое слово use, где он используется в пространствах имен, но здесь он выглядит иначе.

Спасибо.

4b9b3361

Ответ 1

Использование "использования" также верно и в этом случае.

С закрытием для доступа к переменным, которые находятся вне контекста функции, вам необходимо явно предоставить разрешение функции с помощью функции use. В этом случае это означает, что вы предоставляете функции доступ к переменным $tax и $total.

Вы заметили, что $tax был передан как параметр функции getTotal, а $total был установлен чуть выше строки, где определено замыкание.

Еще одна вещь, указывающая на то, что $tax передается как копия, тогда как $total передается по ссылке (путем добавления и входа спереди). Передача по ссылке позволяет закрытию изменять значение переменной. Любые изменения значения $tax в этом случае будут эффективны только в закрытии, тогда как реальное значение $total.

Ответ 2

Когда вы объявляете анонимную функцию в PHP, вам нужно сказать, какие переменные из окружающих областей (если они есть) должны закрываться - они не закрываются автоматически ни по одной из лексических переменных в области, которые упоминаются в теле функции, Список после use - это просто список переменных для закрытия.

Ответ 3

Это означает, что ваша внутренняя функция может использовать переменные $tax и $total от внешней функции, а не только ее параметры.