4 Stimmen

Können wir in PHP eine anonyme Funktion aufrufen, ohne sie in einer Variablen zu speichern?

In JavaScript ist es einfach, eine Funktion, die von einer anderen Funktion zurückgegeben wird, in einer einzigen Anweisung aufzurufen. Betrachten Sie zum Beispiel:

function createOperation(operator)
{
    return Function("a", "b", "return a " + operator + "b;")
}

var result = createOperation("*")(2, 3);

Hier rufen wir eine Funktion auf, um eine andere Funktion zu erstellen, die zwei Werte multipliziert, und rufen dann diese neue Funktion mit zwei Argumenten auf.

Wenn ich versuche, einen ähnlichen Codeausschnitt in PHP zu replizieren, endet es mit zwei Anweisungen und einer zusätzlichen Variablen:

function createOperation(operator)
{
    return create_function('$a,$b', 'return $a '.$operator.' $b;');
}

$temp_var = createOperation("+");
$result = $temp_var(2, 3);

Die kurze, Javascript-ähnliche Form funktioniert nicht:

$result = createOperation("+")(2, 3);

Dies ist besonders mühsam beim Schreiben einer Aufrufkette (Pseudocode):

foo(arg1)(arg2, arg3)()(...)

Was würde werden zu:

$temp1 = foo($arg1);
$temp2 = $temp1($arg2, $arg3);
$temp3 = $temp2();
...

Also meine Frage ist: Gibt es eine Möglichkeit in PHP, eine Funktion, die von einer anderen Funktion zurückgegeben wird, aufzurufen, ohne temporäre Variablen zu verwenden, oder zumindest in einer einzigen Anweisung?

1voto

georg Punkte 205206

Wie im php-Repo gesehen, arbeitet @NikiC aktiv an der Implementierung seines RFCs, die ()()-Syntax ist bereits im trunk:

https://github.com/php/php-src/commit/64e4c9eff16b082f87e94fc02ec620b85124197d

Ich weiß nicht, wie der Freigabeplan aussieht, hoffentlich bekommen wir bald eine anständige Syntax in php.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X