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?

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 &.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.