記事の内容
この記事では、PHPのyield構文について説明します。
yieldはジェネレーター関数の一つです。
PHPのバージョンは、7系です。
yieldのメリット
yeildには、以下の2つのメリットがあります。
- 処理をまとめることができる
- メモリの節約ができる
では、実際に使い方を見ていきたいと思います。
yieldの使い方
ここでは、「1から3までをループする」という部分を共通化して、yieldにしました。
ここで最初に確認して欲しいことは、処理の流れです。
ジェネレーター関数の中とforeachの中が、交互に実行されているのが、yieldの特徴です。
そして、もう一点、重要なポイントがあります。
このプログラムでは、以下の3つのことを実行していますが、ループを回しているのは一回だけです。
それは、ジェネレーターにより「1から3まで」というループ処理を共通化しているから、できることです。
- 「1から3まで」を表示する
- 「1から3まで」に2を掛けて表示する
- 「1から3まで」を合計する
ジェネレーターを使わないで、同じプログラムを書いた場合は、以下のようなコードになります。
この場合、ループ処理「for」が3回、記述されていることがわかります。
yieldを連想配列にすることもできます。
yieldのメモリ効率を確認
通常のループを使う場合とyieldを使った場合では、メモリの消費量に差がつきます。
配列の中身を順番に処理したい時に、「配列を全て作ってから処理をする」と「配列を作りながら処理をする」という2つの差が出た形です。
配列に保存しようとした値が多すぎて、PHPでエラーが出ます。
yieldを使った場合には、エラーが出ません。
まとめ
この記事では、yieldというジェネレーター構文の説明をしました。
何らかの処理をまとめたいと思った時には、yieldを使うことも検討してみて下さい。
Good luck for your engineer life!