Использовать ключевое слово в функциях - 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
, где он используется в пространствах имен, но здесь он выглядит иначе.
Спасибо.
Ответы
Ответ 1
Использование "использования" также верно и в этом случае.
С закрытием для доступа к переменным, которые находятся вне контекста функции, вам необходимо явно предоставить разрешение функции с помощью функции use. В этом случае это означает, что вы предоставляете функции доступ к переменным $tax и $total.
Вы заметили, что $tax был передан как параметр функции getTotal, а $total был установлен чуть выше строки, где определено замыкание.
Еще одна вещь, указывающая на то, что $tax передается как копия, тогда как $total передается по ссылке (путем добавления и входа спереди). Передача по ссылке позволяет закрытию изменять значение переменной. Любые изменения значения $tax в этом случае будут эффективны только в закрытии, тогда как реальное значение $total.
Ответ 2
Когда вы объявляете анонимную функцию в PHP, вам нужно сказать, какие переменные из окружающих областей (если они есть) должны закрываться - они не закрываются автоматически ни по одной из лексических переменных в области, которые упоминаются в теле функции, Список после use
- это просто список переменных для закрытия.
Ответ 3
Это означает, что ваша внутренняя функция может использовать переменные $tax и $total от внешней функции, а не только ее параметры.