Heim  >  Artikel  >  Backend-Entwicklung  >  Pfeilfunktionen in PHP 7.4

Pfeilfunktionen in PHP 7.4

藏色散人
藏色散人Original
2019-11-30 11:58:514670Durchsuche

Kurze Abschlüsse, auch Pfeilfunktionen genannt, sind eine Möglichkeit, kurze Funktionen in PHP zu schreiben. Diese Notation ist nützlich, wenn Abschlüsse an Funktionen wie array_map oder array_filter übergeben werden.

Sie sehen so aus:

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

Davor musste man so schreiben:

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

Fassen wir zusammen, wie man kurze Verschlüsse verwendet.

● Verfügbar seit PHP 7.4

● Sie beginnen mit dem Schlüsselwort fn

● Sie können nur einen Ausdruck haben, die Return-Anweisung

● Die Rückgabe Schlüsselwort ist nicht zulässig

● Parameter- und Rückgabetypen können Typhinweise sein

Eine strenger typisierte Art, das obige Beispiel zu schreiben, könnte sein:

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

Zwei weitere Dinge, die erwähnt werden müssen :

● Der Spread-Operator ist erlaubt

● Referenzen sind erlaubt, beide Parameter können als Rückgabewerte verwendet werden

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

fn&($x) => $x

Kurz gesagt, ein kurzer Abschluss hat die gleiche Funktionalität wie ein normaler Abschluss, außer dass er nur einen Ausdruck zulässt.

# Keine Mehrfachzeilen

Sie haben richtig gelesen: Ein kurzer Abschluss kann nur einen Ausdruck haben. Das bedeutet, dass Sie nicht mehrere Zeilen einfügen können.

Der Grund ist wie folgt:

Das Ziel von Kurzschlüssen besteht darin, die Ausführlichkeit zu reduzieren. fn ist natürlich in allen Fällen kürzer als die Funktion. RFC-Erfinder Nikita Popov ist jedoch der Ansicht, dass die Verwendung kurzer Abschlüsse weniger Vorteile bringt, wenn Sie mit mehrzeiligen Funktionen arbeiten.

Schließlich sind mehrzeilige Abschlüsse per Definition bereits ausführlicher, sodass die Möglichkeit, zwei Schlüsselwörter (Funktion und Rückgabe) zu überspringen, keinen großen Unterschied macht.

Ob Sie dieser Ansicht zustimmen oder nicht, liegt bei Ihnen. Während mir in meinen Projekten viele einzeilige Abschlüsse einfallen, gibt es auch viele mehrzeilige Abschlüsse, und in diesen Fällen vermisse ich persönlich die kurze Syntax.

Es gibt jedoch Hoffnung: Es könnte in Zukunft möglich sein, kurze mehrzeilige Schließungen hinzuzufügen, aber das ist nur ein RFC.

# Wert aus dem äußeren Bereich

Ein weiterer wesentlicher Unterschied zwischen kurzen Schließungen und normalen Schließungen besteht darin, dass für kurze Schließungen nicht das Schlüsselwort „use“ erforderlich ist, um aus dem externen Bereich abrufen zu können Zugriffsdaten.

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

Es ist zu beachten, dass Variablen im äußeren Bereich nicht geändert werden dürfen. Werte sind wertgebunden, nicht referenzgebunden. Dies bedeutet, dass Sie $modifier innerhalb eines kurzen Abschlusses ändern können, obwohl dies keinen Einfluss auf die Variable $modifier im äußeren Bereich hat.

Die einzige Ausnahme ist natürlich das Schlüsselwort $this, das genau wie ein normaler Verschluss funktioniert:

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

# zukünftige Möglichkeiten

Ich habe es bereits erwähnt Bei mehrzeiligen Kurzschlusssperren ist dies auch in Zukunft möglich.

Eine weitere Idee besteht darin, kurze Schließungssyntax in Klassen wie Gettern und Settern zuzulassen:

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

Alles in allem sind kurze Schließungen ein willkommenes Feature, obwohl es noch Raum für Verbesserungen gibt. Der größte davon sind wahrscheinlich mehrzeilige Kurzverschlüsse

Übersetzung: https://stitcher.io/blog/short-closures-in-php

Das obige ist der detaillierte Inhalt vonPfeilfunktionen in PHP 7.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn