PHP Закрывает область видимости переменных

Я рассматриваю PHP-пример Closures на http://us1.php.net/manual/en/functions.anonymous.php

Он предоставляет пример кода ниже и указывает:

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

Я смущен тем, как это работает. $quantity и $product variables мне не кажется, что они будут доступны внутри функции Closure. Разве в этом случае функция Parent Scope бы 1-й областью в функции getTotal() ?

введите описание изображения здесь

Вы недопонимаете подпись функции. $quantity и $product являются регулярными аргументами, которые будут переданы в функцию при ее вызове, они действительно не существуют в родительской области и не предназначены. use ($tax, &$total) – это закрытые переменные из родительской области.

 $foo = 'foo'; // closed over variable // vvvv $func = function ($bar) use ($foo) { // ^^^^ // regular function argument return $foo . $bar; }; echo $func('baz'); // "foobaz" 

Аргументы замыкания $quantity и $product не существуют сами по себе в определении функции, они просто заполнители, которые array_walk заполняет реальными значениями во время процедуры его выполнения. Аргументы use – дополнительные переменные, которые вы импортируете в область вызова array_walk, которая в противном случае была бы недоступна для этой функции.

Две переменные – это вопрос, который передается в обратный вызов array_walk .

Первый параметр будет передан как значение каждого из элементов в массиве, второй будет ключом массива.

Замкнутыми переменными являются те, которые указаны в предложении use .