PHP-Variablen in anonymen Funktionen

119

Ich habe mit anonymen Funktionen in PHP herumgespielt und festgestellt, dass sie keine Variablen außerhalb von PHP zu erreichen scheinen. Gibt es eine Möglichkeit, dieses Problem zu umgehen?

Beispiel:

$variable = "nothing";

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

echo $variable;  //output: "nothing"

Dies gibt "nichts" aus. Gibt es eine Möglichkeit, auf die die anonyme Funktion zugreifen kann $variable?

einord
quelle

Antworten:

277

Ja, verwenden Sie einen Verschluss :

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

Beachten Sie, dass $variableder geänderte Wert außerhalb des Bereichs der anonymen Funktion geändert und abgerufen werden kann, damit er im Abschluss mit referenziert werden kann &.

Nickb
quelle
Es ist neu! Die Syntax ist neu in PHP 5.3.
Rocket Hazmat
1
@Rocket Um fair zu sein, ist die wahre anonyme Funktionssyntax (im Gegensatz zu create_function()) und das useSchlüsselwort (schlecht) auf derselben Dokumentseite dokumentiert , die sie beschreibt.
Dave Random
4
Kurzer Hinweis für diejenigen, die es vielleicht nicht wissen: Sie können das &beim Übergeben eines Objekts löschen, da sie immer als Referenz übergeben werden ... und Ihren Typ-Hinweis nicht vergessen :) ZB:function() use (PDO $pdo) {
keyboardSmasher
@Alliswell Nein, es ist nur für Objekte, andernfalls müssen Sie als Referenz übergeben, um die Variable zu ändern. Siehe dieses Beispiel .
Nickb