Intereting Posts

Использовать ключевое слово в функциях – 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 где он используется в пространствах имен, но здесь он выглядит иначе.

Благодарю.

Solutions Collecting From Web of "Использовать ключевое слово в функциях – PHP"

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

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

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

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

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

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