php arrow は短いクロージャであり、アロー関数とも呼ばれます。PHP で書かれた短い関数です。この関数は、関数にクロージャを渡すときに非常に便利です。短いクロージャは式を 1 つだけ持つことができます。つまり、クロージャ本体に複数の行を含めることはできません。短いクロージャの目的は、冗長性を減らすことです。
このチュートリアルの動作環境: Windows10 システム、php8.1.3 バージョン、DELL G3 コンピューター。
php における矢印の意味は何ですか?
PHP 7.4 アロー関数の例の新しい構文
アロー関数とも呼ばれる短いクロージャは、A PHP で書かれた short 関数。この機能は、array_map や array_map を使用するなど、クロージャを関数に渡すときに非常に便利です。 array_filter function.
これは次のようになります:
// Post オブジェクトのコレクション
$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);
言及する必要がある点が 2 つあります。
拡張演算子を使用して参照を許可することもでき、両方のパラメータを戻り値として使用できます。
結果を参照によって返したい場合は、次のようにします。次の構文を使用する必要があります:
fn&($x) => $x
シンプル つまり、短いクロージャは、式が 1 つだけ許可されることを除いて、通常のクロージャと同じように機能します。
単一行
正しく理解する必要があります。短いクロージャには式を 1 つだけ含めることができます。これは、クロージャ本体に複数の行を含めることはできないことを意味します。
理由は次のとおりです。短いクロージャの目的は、冗長性を減らすことです。もちろん、いずれにしても fn は function よりも短いです。しかし、RFC作成者であるニキータ・ポポフ氏は、 複数行の式である関数を扱っている場合、クロージャを使用するメリットはさらに少ないと思います。
結局のところ、複数行のクロージャの定義はすでに非常に冗長であるため、これら 2 つのキーワード (function と return) の有無に大きな違いはありません。
この観点に同意するかどうかはあなた次第です。私のプロジェクトでは単一行のクロージャのシナリオがたくさん考えられますが、複数行のクロージャのシナリオもたくさんあり、個人的にはそのような場合には短い構文を好みます。
ただし、希望はあります。複数行の短いクロージャが将来追加される可能性がありますが、それも別の RFC になるでしょう。
外部スコープの値
短いクロージャと通常のクロージャのもう 1 つの注目すべき機能は、短いクロージャが use キーワードを使用せずに外部スコープのデータにアクセスできることです。
$modifier = 5; array_map(fn($x) => $x * $modifier, $numbers);
外部スコープ内の変数は変更できないことに注意してください。参照渡しではなく値渡しであるためです。これは、短いクロージャ内で $modifier 変数を変更できるが、外側のスコープ内の変数は変更されないことを意味します。 $modifier 変数には影響があります。
もちろん例外があります。それが $this キーワードで、通常のクロージャとまったく同じ効果があります。
array_map(fn($x) => $x * $this->modifier, $numbers);
開発の見通し
すでに述べた複数行のクロージャは、まだ将来的に開発の可能性があります。私の考えでは、ゲッターやセッターなどのクラス内で短いクロージャを使用できるようにするというアイデアです。 Function.
class Post { private $title; fn getTitle() => $this->title; }
全体として、短いクロージャは非常に歓迎される機能ですが、改善が必要な領域はたくさんあります。最も可能性が高いのは複数行クロージャです。
以上がPHPの矢印は何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。