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

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

藏色散人
リリース: 2023-03-17 11:06:01
オリジナル
1316 人が閲覧しました

php のアローは、php で書かれた短い関数であるアロー関数です。この関数は、関数にクロージャを渡すときに非常に便利です。その使用構文は、「$posts = [/* . .. */];$ids = array_map(fn($post) => $post->id, $posts);”。

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

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。

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

PHP 7.4 の新しい構文のアロー関数の例の詳細な説明

短いクロージャは、アロー関数とも呼ばれ、PHP で書かれた短い関数です。この機能は、array_map 関数または array_filter 関数を使用するときに非常に便利です。

これは次のようになります:

// 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 =>gt; $post->id, $posts) ;

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

展開演算子の使用も許可されます

    参照も許可され、両方とも許可されます。パラメータは戻り値として使用できます
  • 結果を参照によって返したい場合は、次の構文を使用する必要があります。 $xx

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

単一行

正しく理解する必要があります。短いクロージャには式を 1 つだけ含めることができます。これは、クロージャ本体に複数の行を含めることはできないことを意味します。 理由は次のとおりです。短いクロージャの目的は、冗長性を減らすことです。もちろん、いずれにしても fn は function よりも短いです。しかし、RFC の作成者 Nikita Popov は、複数行の式である関数を扱っている場合、クロージャを使用しても得られるメリットはさらに少ないと考えています。 結局のところ、複数行のクロージャの定義はすでに非常に冗長であるため、これら 2 つのキーワード (function と return) の有無に大きな違いはありません。

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

ただし、希望はあります。複数行の短いクロージャが将来追加される可能性がありますが、それも別の RFC になるでしょう。

外部スコープの値

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

$modifier = 5;
array_map(fn($x) => $x * $modifier, $numbers);
ログイン後にコピー
外部スコープ内の変数は変更できないことに注意してください。参照渡しではなく値渡しであるためです。これは、短いクロージャ内で $modifier 変数を変更できるが、外側のスコープの

$modifier

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

もちろん例外があります。それが $this キーワードで、通常のクロージャとまったく同じ効果があります: array_map(fn($x) =>gt ; $x * $this->modifier, $numbers);

開発の見通し

すでに述べました複数行のクロージャは、今後も開発の可能性があります。私の頭の中にあるもう 1 つのアイデアは、ゲッター関数やセッター関数などの短いクロージャをクラスで使用できるようにすることです。

class Post {
  private $title;

  fn getTitle() => $this->title;
}
ログイン後にコピー
要するに、短いクロージャは A非常に人気のある機能ですが、改善の余地はたくさんあります。最も可能性が高いのは複数行のクロージャです。 推奨学習: 「PHP ビデオ チュートリアル

以上がPHPの矢印は何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート