Czy można je wywołać bez numeru przypisując identyfikator tak, jak w przypadku JavaScript? na przykład
Nie w PHP 5.x; chyba że policzysz, gdy twoja metoda przyjmuje wywołanie zwrotne jako argument. np:
$square = array_map(function ($v) { return $v*$v; }, $array);
Co jest właściwe wykorzystanie użytkowania konstruktem przy definiowaniu anonimowy funkcję
use
słów kluczowych wskazuje, które zmienne z bieżącego zakresu leksykalnego powinny być przywożone do zamknięcia. Można nawet przekazać je przez odniesienie i zmienić zmienna podjęcia, np:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
jaki jest status anonimowego funkcji w sposób publiczny z dostępności do własności prywatnej?
Zamknięcia zdefiniowane wewnątrz klasy mają pełny dostęp do wszystkich jego właściwości i metod, w tym prywatnymi bez konieczności importowania $this
poprzez słowa kluczowego use
w PHP 5.4:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
Należy zauważyć, że z jakiegoś dziwnego powodu obsługa dla $this
w zamknięciach was removed in PHP 5.3. W tej wersji, można obejść to ograniczenie przy użyciu coś takiego:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
Ale to daje dostęp tylko do członków publicznych, próbuje uzyskać dostęp do prywatnych użytkowników będzie nadal daje błąd.
Należy również pamiętać, że próba importowania $this
(przez use
), niezależnie od wersji PHP, spowoduje błąd krytyczny Cannot use $this as lexical variable
.
Zamknięcie nie jest całkowicie równoznaczne z anonimowa funkcja, chociaż anonimowe funkcje w PHP są typu 'Zamknięcie'. Tak, żebyś wiedział. – BoltClock
Jaki jest dokładny błąd podczas wypróbowywania drugiego przykładu kodu? "błędne" jest trochę niespecyficzne. – BoltClock
Nie można użyć $ this jako zmiennej leksykalnej –