ホームページ  >  記事  >  バックエンド開発  >  PHP 7.4 アロー関数の使用法

PHP 7.4 アロー関数の使用法

Guanhui
Guanhui転載
2020-04-29 12:18:013053ブラウズ

ショート クロージャはアロー関数とも呼ばれ、PHP で書かれた短い関数です。この機能は、array_map 関数や array_filter 関数を使用する場合など、関数にクロージャを渡すときに役立ちます。 # 短いクロージャ関数の使い方をまとめてみましょう。

PHP 7.4で利用可能

  • fn付き

  • で始まるキーワード
  • # には式を 1 つだけ含めることができます。つまり、return 式

  • #return キーワードは無視できます

  • パラメータと戻り値の型は型ヒントに使用できます

  • 上記の例のより厳格な型制限は次のように記述できます:

    // Post 对象的集合
    $posts = [/* … */];
    $ids = array_map(fn($post) => $post->id, $posts);
    而以前,你必须这样写:
    $ids = array_map(function ($post) {
        return $post->id;
    }, $posts);

    言及する必要がある点が 2 つあります。 :

スプレッド演算子も許可されます

  • 参照が許可され、両方のパラメータを戻り値として使用できます

  • 結果を参照によって返したい場合は、次の構文を使用する必要があります。

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

    つまり、短いクロージャは、式が 1 つだけ許可されることを除いて、通常のクロージャと同じ機能を持ちます。 。 それは同じだ。

単一行

正しく理解する必要があります。短いクロージャには式を 1 つだけ含めることができます。これは、クロージャ本体に複数の行を含めることはできないことを意味します。

理由は次のとおりです。短いクロージャの目的は、冗長性を減らすことです。もちろん、いかなる場合でも fn

function

より短いです。しかし、RFC の作成者 Nikita Popov は、複数行の式である関数を扱っている場合、クロージャを使用しても得られるメリットはさらに少ないと考えています。

結局のところ、複数行のクロージャの定義はすでに非常に冗長なので、これら 2 つのキーワード (functionreturn

) の有無に関係なく、大きな違い。

この観点に同意するかどうかはあなた次第です。私のプロジェクトでは単一行のクロージャのシナリオがたくさん考えられますが、複数行のクロージャのシナリオもたくさんあり、個人的にはそのような場合には短い構文を好みます。 ただし、希望はあります。複数行の短いクロージャが将来追加される可能性がありますが、それも別の RFC になるでしょう。

外部スコープの値

短いクロージャと通常のクロージャのもう 1 つの注目すべき特徴は、短いクロージャが use キーワード スコープ データを使用せずに外部にアクセスできることです。

fn&($x) => $x
外部スコープ内の変数は変更できないことに注意してください。参照渡しではなく値渡しであるためです。これは、短いクロージャ内の $modifier

変数を変更できるが、外側のスコープの

$modifier

変数には影響しないことを意味します。

もちろん、例外があります。それは $this キーワードであり、通常のクロージャとまったく同じ効果があります:

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

開発の見通し

すでに述べた複数行クロージャは、将来的にも開発の可能性があります。思い浮かぶもう 1 つのアイデアは、クラス内で

getter 関数や setters

関数などの短いクロージャを許可することです。

array_map(fn($x) => $x * $this->modifier, $numbers);
つまり、短いクロージャは非常に歓迎される機能です。 、まだ望むべき点はたくさんありますが。最も可能性が高いのは複数行のクロージャです。

以上がPHP 7.4 アロー関数の使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。