Zmienne PHP w funkcjach anonimowych


119

Bawiłem się anonimowymi funkcjami w PHP i zdałem sobie sprawę, że wydają się nie docierać do zmiennych poza nimi. Czy jest jakiś sposób na obejście tego problemu?

Przykład:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Spowoduje to wyświetlenie „nic”. Czy istnieje sposób, aby funkcja anonimowa mogła uzyskać dostęp do $variable?

Odpowiedzi:


277

Tak, użyj zamknięcia :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Zauważ, że abyś mógł modyfikować $variablei pobierać zmodyfikowaną wartość poza zasięgiem funkcji anonimowej, musisz odwoływać się do niej w zamknięciu za pomocą &.


Jest nowe! Jest to nowa składnia w PHP 5.3.
Rocket Hazmat,

1
@Rocket Tak więc, aby być uczciwym, jest to prawdziwa anonimowa składnia funkcji (w przeciwieństwie do create_function()), a usesłowo kluczowe jest udokumentowane (źle) na tej samej stronie dokumentu, która je opisuje.
DaveRandom,

4
Krótka uwaga dla tych, którzy mogą nie wiedzieć: Możesz upuścić &przy przekazywaniu obiektu, ponieważ są one zawsze przekazywane przez odniesienie ... i nie zapomnij o swojej podpowiedzi do typu :) Np .:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell Nie, to tylko dla obiektów, w przeciwnym razie musisz przekazać przez odniesienie, aby zmodyfikować zmienną. Zobacz ten przykład .
nickb
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.