$apples
принимает значение, передаваемое функции, когда оно вызывается, например.
function my_method($callback) {
// inside the callback, $apples will have the value "foo"
$callback('foo');
}
$oranges
будет относиться к значению переменной $oranges
, которая существует в рамках которой вы определили замыкание. Например .:
$oranges = 'bar';
my_method(function($apples) use ($oranges) {
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
Разница в том, что $oranges
связан, когда функция определена и $apples
связан, когда функция называется .
Затворы позволяют получить доступ к переменным, определенные вне функции, но вы должны явно указать PHP, какие переменные должны быть доступны. Это похоже (но не эквивалентны!) С помощью global
ключевого слова, если переменная определена в глобальном масштабе:
$oranges = 'bar';
my_method(function($apples) {
global $oranges;
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
Различия между использованием затворов и global
:
- Вы можете связать локальную переменные для замыканий,
global
работает только с глобальными переменными.
Закрытие связывает значение переменной в момент закрытия . Изменения в переменных после определения функции не влияют на нее.
С другой стороны, если вы используете global
, вы получите значение, которое имеет переменная в момент, когда функция называется.
Пример: [? В PHP 5.3.0, что является функцией "использовать" идентификатор]
$foo = 'bar';
$closure = function() use ($foo) {
echo $foo;
};
$global = function() {
global $foo;
echo $foo;
};
$foo = 42;
$closure(); // echos "bar"
$global(); // echos 42
Возможная Дубликат (http://stackoverflow.com/questions/1065188/in- php-5-3-0-what-the-function-use-identifier) – Trix