Pfeilfunktionen in PHP 7.4


Pfeilfunktionen, auch Short Closures genannt , sind eine gute Möglichkeit, sauberen Code in PHP zu schreiben. Diese Form des Schreibens ist nützlich, wenn Closures an Funktionen wie array_map oder array_filter .


Ein Beispiel:


 //   Post $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts); 

Früher war es so geschrieben:


 $ids = array_map(function ($post) { return $post->id; }, $posts); 

Kurz gesagt:


  • Verfügbar seit PHP 7.4
  • Beginnen Sie mit dem Schlüsselwort fn
  • Kann nur einen Ausdruck haben, der auch der Rückgabewert ist.
  • Nicht unterstützte return
  • Typ-Hinweis wird in Argumenten und Rückgabewerten unterstützt

Die stereotype Schreibweise des obigen Beispiels:


 $ids = array_map(fn(Post $post): int => $post->id, $posts); 

Zwei weitere wichtige Dinge:


  • Variablenoperator unterstützt
  • Links werden sowohl für Argumente als auch für Rückgabewerte unterstützt

Wenn Sie einen Wert als Referenz zurückgeben möchten, verwenden Sie die folgende Syntax:


 fn&($x) => $x 

Pfeilfunktionen implementieren die gleiche Funktionalität, die Sie von normalen Closures erwarten, sie enthalten nur einen Ausdruck.


Keine mehrzeilige


Sie lesen das richtig: Kurzschlüsse können nur einen Ausdruck enthalten. Dies bedeutet, dass Sie nicht mehrere Zeilen enthalten können.


Das Argument lautet: Das Ziel von Kurzschlüssen ist die Reduzierung der Ausführlichkeit. fn , definitiv kürzer als function in jeder Hinsicht. Das Überspringen der function und der return Schlüsselwörter ändert nichts, macht den Code jedoch besser lesbar.


Stimmen Sie dieser Meinung zu? Gleichzeitig gibt es mit der neuen Syntax für einzeilige Funktionen viele mehrzeilige, die durch ein solches Upgrade nicht blockiert würden.


Hoffentlich gibt es in Zukunft einen RFC mit einer kurzen Ansage und mehrzeiligen Funktionen, aber bisher sind dies nur meine Träume.


Variablen aus dem äußeren Bereich


Ein weiterer wesentlicher Unterschied zwischen kurzen und normalen Fehlern besteht darin, dass bei ersteren die Verwendung des Schlüsselworts use nicht erforderlich ist, um auf Daten aus einem externen Bereich zuzugreifen.


 $modifier = 5; array_map(fn($x) => $x * $modifier, $numbers); 

Es ist wichtig zu beachten, dass Sie diese Variablen nicht ändern können. Werte beziehen sich auf Werte, nicht auf Referenzen. Dies bedeutet, dass Sie den $modifier innerhalb eines Kurzschlusses ändern können, dies hat jedoch keine Auswirkungen auf die $modifier außerhalb des Kurzschlusses.


Die einzige Ausnahme ist das $this , das genauso funktioniert wie in der normalen Version:


 array_map(fn($x) => $x * $this->modifier, $numbers); 

Zukunftschancen


Ich habe oben bereits die Idee eines Mehrleiterkurzschlusses erwähnt. Ein weiterer nützlicher Vorschlag ist, die Verwendung von Kurzsyntax in Klassen zuzulassen, z. B. für Getter und Setter:


 class Post { private $title; fn getTitle() => $this->title; } 

Im Allgemeinen sind Pfeilfunktionen eine sehr gute Funktion, obwohl noch Verbesserungsbedarf besteht.


Hast du irgendwelche Gedanken dazu?

Source: https://habr.com/ru/post/de476242/


All Articles