アロー関数とも呼ばれる短いクロージャは、PHP で短い関数を記述する方法です。この表記は、array_map や array_filter などの関数にクロージャを渡すときに便利です。
これらは次のようになります:
// A collection of Post objects $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts);
その前は、次のように記述する必要がありました:
$ids = array_map(function ($post) { return $post->id; }, $posts);
短いクロージャの使用方法をまとめてみましょう。
# PHP 7.4 以降で使用可能
# fn キーワードで始まります
# 式は 1 つだけ含めることができ、return ステートメント
# return ステートメントキーワードは許可されていません
#● パラメータと戻り値の型は型ヒントにすることができます上記の例をより厳密に型指定して記述する方法は、次のようになります。$ids = array_map(fn(Post $post): int => $post->id, $posts);
fn&($x) => $x
# 複数行は禁止
そのとおりです。短いクロージャには式を 1 つだけ含めることができます。つまり、複数行を含めることはできません。 理由は次のとおりです: 短いクロージャの目的は、冗長性を減らすことです。もちろん、fn はどの場合でも function よりも短くなります。ただし、RFC の作成者 Nikita Popov は、複数行の関数を扱う場合、短いクロージャを使用しても得られるメリットは少ないと考えています。 結局のところ、複数行のクロージャは定義上すでに冗長であるため、2 つのキーワード (function と return) をスキップできても大きな違いはありません。 この見解に同意するかどうかはあなた次第です。私のプロジェクトには単一行のクロージャがたくさんあると思いますが、複数行のクロージャもたくさんあります。そのような場合、私は個人的に短い構文を見逃します。 ただし、希望はあります。将来的には短い複数行のクロージャを追加できる可能性がありますが、これは単なる RFC です。# 外部スコープからの値
短いクロージャと通常のクロージャのもう 1 つの大きな違いは、短いクロージャではアクセスするために use キーワードが必要ないことです。外部スコープのデータにアクセスします。$modifier = 5; array_map(fn($x) => $x * $modifier, $numbers);
array_map(fn($x) => $x * $this->modifier, $numbers);
#I複数行のショート クロージャについてはすでに述べましたが、これは将来的にも可能性があります。
もう 1 つのアイデアは、クラス内でゲッターやセッターなどの短いクロージャ構文を許可することです。class Post { private $title; fn getTitle() => $this->title; }
翻訳: https://stitcher.io/blog/short-closures-in-php
以上がPHP 7.4 のアロー関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。