## Pfeilfunktionen

Pfeilfunktionen wurden in PHP 7.4 als prägnantere Syntax für anonyme Funktionen eingeführt.

Sowohl anonyme Funktionen als auch Pfeilfunktionen sind unter Verwendung der Closure-Klasse implementiert.

Pfeilfunktionen haben die grundsätzliche Form `fn (argument_list) => expr`.

Pfeilfunktionen unterstützen dieselbe Funktionalität wie anonyme Funktionen, außer, dass die Verwendung von Variablen des Eltern-Gültigkeitsbereichs immer automatisch erfolgt.

Wenn eine Variable, die im Ausdruck verwendet wird, im Eltern-Gültigkeitsbereich definiert ist, wird sie implizit per Wertübergabe gebunden. Im folgenden Beispiel verhalten sich die Funktionen $fn1 und $fn2 auf die gleiche Weise.

Beispiel #1 Pfeilfunktionen binden Variablen automatisch per Wertübergabe

    <?php

    $y = 1;

    $fn1 = fn($x) => $x + $y;
    // gleichwertig zur Verwendung von $y per Wertübergabe:
    $fn2 = function ($x) use ($y) {
        return $x + $y;
    };

    var_export($fn1(3));
    ?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

    4

Dies funktioniert auch, wenn Pfeilfunktionen verschachtelt werden:

Beispiel #2 Pfeilfunktionen binden Variablen automatisch per Wertübergabe, selbst wenn sie verschachtelt sind

    <?php

    $z = 1;
    $fn = fn($x) => fn($y) => $x * $y + $z;
    // gibt 51 aus
    var_export($fn(5)(10));
    ?>

Ähnlich wie bei anonymen Funktion erlaubt die Pfeilfunktionssyntax beliebige Funktionssignaturen, einschließlich Parameter- und Rückgabetypen, Defaultwerte, variadische Parameter sowie Referenzübergabe und -rückgabe. Alle folgenden sind gültige Beispiele von Pfeilfunktionen:

Beispiel #3 Beispiele von Pfeilfunktionen

    <?php

    fn(array $x) => $x;
    static fn($x): int => $x;
    fn($x = 42) => $x;
    fn(&$x) => $x;
    fn&($x) => $x;
    fn($x, ...$rest) => $rest;

    ?>

Pfeilfunktionen verwenden die Wertübergabe-Bindung. Dies entspricht in etwa der Verwendung von `use($x)` für jede Variable $x, die in der Pfeilfunktion verwendet wird. Wertübergabe-Bindung bedeutet, dass es nicht möglich ist, Werte aus dem äußeren Geltungsbereich zu ändern. Anonyme Funktionen können statt dessen für Referenzübergabe-Bindungen verwendet werden.

Beispiel #4 Werte aus dem äußeren Geltungsbereich können nicht durch Pfeilfunktionen geändert werden

    <?php

    $x = 1;
    $fn = fn() => $x++; // hat keine Wirkung
    $fn();
    var_export($x);  // gibt 1 aus

    ?>

### Changelog

Version | Beschreibung
--- | ---
7.4.0 | Pfeilfunktionen sind verfügbar.

### Anmerkungen

> Hinweis: Es ist möglich func_num_args(), func_get_arg() und func_get_args() innerhalb einer Pfeilfunktion zu verwenden.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open