Menu

PHP Arrow Functions: Syntax fn() => und Beispiele

Eine Arrow Function ist eine anonyme Funktion aus einem Ausdruck, geschrieben als fn($x) => $x * 2. Sie verwendet äußere Variablen automatisch, als Wert, ohne use. Hier: die Syntax, wie das Einfangen funktioniert, Typen, Callbacks für array_map und usort und wann stattdessen eine vollständige Closure passt.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Eine Arrow Function ist eine kurze anonyme Funktion: fn($x) => $x * 2. Der Rumpf nach => ist ein einziger Ausdruck, dessen Wert zurückgegeben wird, und jede Variable aus dem umgebenden Code, die der Ausdruck verwendet, wird automatisch eingefangen, als Wert. Arrow Functions gibt es seit PHP 7.4, und sie werden meist als Callbacks verwendet.

Die Syntax

fn, die Parameterliste, =>, ein Ausdruck. Parametertypen, Standardwerte und ein Rückgabetyp funktionieren wie bei normalen Funktionen:

Es gibt kein Schlüsselwort return und keine geschweiften Klammern. Ein langer Ausdruck lässt sich zur besseren Lesbarkeit trotzdem über mehrere Zeilen verteilen.

Äußere Variablen werden als Wert eingefangen

Eine Arrow Function sieht jede Variable des Scopes, in dem sie erzeugt wird. Sie kopiert deren Werte in diesem Moment. Änderungen innen bleiben innen, und Änderungen außen nach dem Erzeugen der Funktion sieht sie nicht:

Das ist der Hauptunterschied zu function () use (&$count), das eine Variable per Referenz teilen kann. Eine Arrow Function kann einer äußeren Variable keinen neuen Wert zuweisen. Ein eingefangenes Objekt kann sie trotzdem ändern (die Kopie ist ein Verweis auf dasselbe Objekt), und ein per Referenz deklarierter Parameter funktioniert wie in jeder Funktion: fn(array &$list) => $list[] = 'x'.

Callbacks für array_map, array_filter und usort

Die meisten Array-Funktionen nehmen einen Callback, und dort sparen Arrow Functions am meisten Ballast. Vergleiche einen Filter, auf beide Arten geschrieben:

<=> liefert -1, 0 oder 1, genau das, was usort() will, also passt das Sortieren nach einem Feld in eine Zeile. Vertausche $a und $b, um absteigend zu sortieren.

Arrow Functions, die Arrow Functions zurückgeben

Zu den eingefangenen Variablen gehören die Parameter einer umschließenden Arrow Function, also kannst du sie verschachteln, um Funktionen aus anderen Werten zu bauen:

Beachte, dass array_filter() die ursprünglichen Schlüssel behält, und deshalb beginnt das Ergebnis bei Index 1.

fn vs function: wann du eine vollständige Closure brauchst

Arrow Functions kommen an ihre Grenze, wenn der Rumpf mehr als einen Ausdruck braucht oder eine äußere Variable ändern muss. Dann verwendest du eine anonyme Funktion:

fn($x) => ...function ($x) use ($y) { ... }
Rumpfein Ausdruckbeliebige Anweisungen
Rückgabeautomatischexplizites return
Äußere Variablenalle verwendeten, automatischnur die in use aufgeführten
Einfangen per Referenzneinja, use (&$y)
Verfügbar seitPHP 7.4PHP 5.3

Wenn sich eine Arrow Function eng anfühlt, sind es oft zwei Aufgaben in einer. Sie in einen Filter und eine Summe aufzuteilen, wie oben, hält jeden Callback bei einem einzigen Ausdruck.

Häufig gestellte Fragen

Was ist eine Arrow Function in PHP?

Eine kurze anonyme Funktion, eingeführt mit PHP 7.4: fn($x) => $x * 2. Ihr Rumpf ist ein einziger Ausdruck, dessen Wert automatisch zurückgegeben wird, und sie kann Variablen aus dem umgebenden Scope ohne use-Klausel lesen.

Kann eine Arrow Function in PHP mehrere Zeilen haben?

Nein. Der Rumpf nach => muss ein Ausdruck sein; einen Block mit Anweisungen gibt es nicht. Du kannst einen langen Ausdruck über mehrere Zeilen verteilen, aber wenn du if, Schleifen oder mehrere Anweisungen brauchst, verwendest du stattdessen function () use (...) { ... }.

Kann eine Arrow Function eine äußere Variable ändern?

Nein. Arrow Functions fangen äußere Variablen als Wert ein, also ändert fn() => $count++ nur die eigene Kopie, und $count draußen bleibt gleich. Um eine äußere Variable zu ändern, verwendest du eine Closure mit use (&$count).

Was ist der Unterschied zwischen fn und function in PHP?

fn($x) => ... enthält einen Ausdruck, gibt ihn implizit zurück und fängt jede verwendete äußere Variable als Wert ein. function ($x) use ($y) { ... } kann beliebige Anweisungen enthalten, braucht ein explizites return und sieht nur die in use aufgeführten Variablen, die auch per Referenz eingefangen werden können.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S