PHP będzie obsługiwać zamknięcia natywnie w wersji 5.3. Zamknięcie jest dobre, gdy potrzebujesz funkcji lokalnej, która jest używana tylko do jakiegoś małego, konkretnego celu. Dokument RFC dla domknięć daje dobry przykład:
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
Pozwala to zdefiniować replacement
funkcję lokalnie wewnątrz replace_spaces()
, aby nie była:
1) Zaśmiecanie globalnej przestrzeni nazw
2 ) Sprawianie, że ludzie trzy lata później zastanawiają się, dlaczego istnieje funkcja zdefiniowana globalnie, która jest używana tylko w jednej innej funkcji
Utrzymuje porządek. Zwróć uwagę, że sama funkcja nie ma nazwy, po prostu jest zdefiniowana i przypisana jako odniesienie $replacement
.
Ale pamiętaj, na PHP 5.3 trzeba poczekać :)
Możesz również uzyskać dostęp do zmiennych spoza jego zakresu w zamknięciu za pomocą słowa kluczowego use
. Rozważmy ten przykład.
$multiplier = 3;
$numbers = array(1,2,3,4);
array_walk($numbers, function($number) use($multiplier){
echo $number * $multiplier;
});
Doskonałe wyjaśnienie podano tutaj. Co to są lambdy i domknięcia php