anonimowych funkcje (zamknięcia) może być utworzony jako funkcji lokalnych (a więc nie pollluting przestrzeni globalnej, jak sugeruje Dathan).
Za pomocą słowa kluczowego "use" zmienne przekazywane lub tworzone przez funkcję otaczającą mogą być używane wewnątrz zamknięcia. Jest to bardzo przydatne w funkcjach zwrotnych, które są ograniczone na ich liście parametrów. Zmienne "użytkowania" można zdefiniować poza zamknięciem, eliminując potrzebę ich ponownego definiowania za każdym razem, gdy wywoływane jest zamknięcie.
function change_array($arr, $pdo)
{
$keys = array('a', 'c');
$anon_func = function(& $val, $key) use ($keys, $pdo)
{
if (in_array($key, $keys) {
$pdo->query('some query using $key');
$val = $pdo->fetch();
}
}
arr_walk($arr, $anon_func);
return $arr;
}
$pdo = new($dsn, $uname, $pword);
$sample = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$sample = change_array($sample, $pdo);
(Oczywiście ten przykład może być prostsze bez zamknięcia, ale to tylko na pokaz.)
wielkie pytanie i wielkie odpowiedzi. Myślę, że wiedziałem, jakie funkcje lambda były i jak można je wykorzystać w PHP (ponieważ używam ich cały czas w jQuery), ale nigdy nie chciałem o tym myśleć ... po prostu aktywnie zignorowałem to, aż ktoś przypadkowo zapytał o to. Byłem zbyt leniwy, aby zweryfikować moje przypuszczenia, ale przypadkowo znalezienie odpowiedzi zadziałało idealnie dla mnie. Jeszcze raz dzięki. :) – KyleFarris
OK, więc poza wszystkimi hype ("Lambda the Ultimate") i faktem, że można zbudować cały język z funkcji lambda, o ile PHP idzie, to jest użycie do jednorazowego użycia, wyrzucenia funkcjonować. To jest wiadomość, którą otrzymuję. – user151841