ホームページ  >  記事  >  バックエンド開発  >  PHPの矢印は何を意味しますか

PHPの矢印は何を意味しますか

zbt
zbtオリジナル
2023-06-13 11:04:291233ブラウズ

php arrow は短いクロージャであり、アロー関数とも呼ばれます。PHP で書かれた短い関数です。この関数は、関数にクロージャを渡すときに非常に便利です。短いクロージャは式を 1 つだけ持つことができます。つまり、クロージャ本体に複数の行を含めることはできません。短いクロージャの目的は、冗長性を減らすことです。

PHPの矢印は何を意味しますか

このチュートリアルの動作環境: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。