$apples
przyjmie wartość przekazaną do funkcji po jej wywołaniu, np.
function my_method($callback) {
// inside the callback, $apples will have the value "foo"
$callback('foo');
}
$oranges
będzie odnosić się do wartości zmiennej $oranges
który istnieje w zakresie, w którym zdefiniowane zamknięcie. Np .:
$oranges = 'bar';
my_method(function($apples) use ($oranges) {
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
Różnice że $oranges
jest zobowiązany, gdy funkcja jest zdefiniowanai $apples
jest zobowiązany, gdy funkcja jest nazywa.
Zamknięcia umożliwiają dostęp do zmiennych zdefiniowanych poza funkcją, ale musisz wyraźnie powiedzieć PHP, które zmienne powinny być dostępne. Jest to podobne (ale nie równowartość!), Aby za pomocą słowa kluczowego global
jeśli zmienna jest zdefiniowana w globalnym zakresie:
$oranges = 'bar';
my_method(function($apples) {
global $oranges;
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
różnice między używaniem zamknięć i global
:
- Można powiązać lokalnej zmienne do zamknięć,
global
działa tylko ze zmiennymi globalnymi.
Zamknięcia wiążą wartość o wartości zmiennej w momencie zamknięcia zdefiniowane jako. Zmiany zmiennych po zdefiniowaniu funkcji nie mają na nie wpływu.
Z drugiej strony, jeśli użyjesz global
, otrzymasz wartość, którą ma zmienna w momencie, gdy funkcja jest o nazwie.
Przykład [? W PHP 5.3.0, co jest funkcją "stosowanie" identyfikator]
$foo = 'bar';
$closure = function() use ($foo) {
echo $foo;
};
$global = function() {
global $foo;
echo $foo;
};
$foo = 42;
$closure(); // echos "bar"
$global(); // echos 42
Możliwe duplikat (http://stackoverflow.com/questions/1065188/in- php-5-3-0-co-jest-funkcja-użyj-identyfikator) – Trix