Pfeilfunktionen wurden in PHP 7.4 als prägnantere Syntax für anonyme Funktionen eingeführt.
Sowohl anonyme Funktionen wie Pfeilfunktionen sind unter Verwendung der Closure-Klasse implementiert.
Pfeilfunktionen haben die grundsätzliche Form
fn (argument_list) => expr
.
Pfeilfunktionen unterstützen dieselben Features wie anonyme Funktionen, außer, dass die Verwendung von Variablen des Elterngültigkeitsbereichs immer automatisch erfolgt.
Wenn eine Variable, die im Ausdruck verwendet wird, im Elterngü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
Die funktioniert ebenfalls, 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, Defaultwerten, variadischen Parametern, 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(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;
?>
Pfeilfunktionen verwenden 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
?>
Version | Beschreibung |
---|---|
7.4.0 | Pfeilfunktionen sind verfügbar. |
Hinweis: Es ist möglich func_num_args(), func_get_arg() und func_get_args() innerhalb einer Pfeilfunktion zu verwenden.