Я нашел код вроде этого и не могу найти, что он делает
$callback = function ($pricePerItem) use ($tax, &$total) { $total += $pricePerItem * ($tax + 1.0); };
Документация php только говорит
Ключ «use» также применяется к конструкциям закрытия:
но не объясняет, что он на самом деле делает.
Он контролирует область действия. В этом случае переменные $tax
и $total
объявляются вне анонимной функции. Поскольку они перечислены в предложении use, они доступны изнутри.
Амперсанд делает переменную полностью разделенной – например, изменения, сделанные в закрытии, отразятся во внешнем масштабе. В случае $tax
, переменная является копией, поэтому ее нельзя изменить из-за закрытия.
Большинство других языков с поддержкой анонимных функций просто по умолчанию имеют лексическую область, но поскольку у PHP уже есть другие правила определения области охвата, это создаст всевозможные странные ситуации, нарушая совместимость с предыдущими версиями. В качестве курорта это было довольно неудобное решение.
Проверьте это – http://php.net/manual/en/functions.anonymous.php , если анонимная функция хочет использовать локальные переменные (для вашего кода это $tax
и $total
), он должен использовать use
для ссылки на них ,