php yield は、yield キーワードがジェネレーター関数からデータを返すことを意味します。yield ステートメントは return ステートメントとよく似ています。Yield は関数の実行を停止してリターンするのではなく、ループ ジェネレーター コードを提供します。値を返し、ジェネレーター関数の実行を一時停止します。
php yield の意味:
1. yield とは何ですか?
yield キーワードは、ジェネレーター関数からデータを返します。
ジェネレーター関数の中核は、yield キーワードです。最も単純な形式では、yield ステートメントは return ステートメントによく似ており、関数の実行を停止して戻るのではなく、ループ ジェネレーターのコードに値を提供し、ジェネレーター関数の実行を一時停止します。
2. ジェネレーター関数とは何ですか?
ジェネレーター関数は、実際にはイテレーターを作成するためのよりコンパクトで効率的な方法です。これにより、関数を反復処理するときに
計算して値を返す関数 (xrange) を定義できます:
foreach (xrange(1, 10) as $key => $value) { echo "$key => $value", PHP_EOL; }
これにより、次の出力が作成されます:
0 => 1 1 => 2 … 9 => 10
ジェネレーター関数で <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">yield $someKey => $someValue;</pre><div class="contentsignin">ログイン後にコピー</div></div> を使用して <code>foreach
の $key
を制御することもできます。表示したいのは $someKey
です。 $key
と $someValue
の内容は $val
の値です。質問の例では $i
です。
3. 通常の機能とどう違うのですか?
なぜこの出力を実現するために PHP のネイティブ range 関数を使用しなかったのか不思議に思われるかもしれません。はい、そうです。出力は同じになります。違いはそこに到達する方法です。
rangePHP を使用すると、それが実行され、数値の配列全体がメモリ内に作成され、その配列全体
が foreach ループに返され、その配列全体が処理されて値が出力されます。 。つまり、foreachwill は配列自体を操作します。レンジ機能とフォーリーチは一度だけ「話しかける」だけです。郵便で荷物を受け取るようなものだと考えてください。配達員が荷物を手渡して出発します。次に、パッケージ全体を開梱し、中にあるものをすべて取り出します。
ジェネレーター関数を使用すると、PHP は関数にステップインして、end キーワードまたは yield キーワードが見つかるまで実行します。 yield が発生すると、現在の値が外側のループに返されます。その後、ジェネレーター関数に戻り、生成されたところから続行します。 xrange には for ループがあるため、$max に達するまで実行され、yield されます。 foreach とジェネレーターが卓球をしているようなものだと考えてください。
4. なぜそれが必要なのでしょうか?
明らかに、ジェネレーターを使用してメモリ制約を回避できます。環境によっては、 range(1, 1000000) を実行するとスクリプトが致命的になりますが、ジェネレーターで同じことを実行しても問題ありません。または、Wikipedia にあるように:
ジェネレーターはオンデマンドでのみ降伏値を計算するため、高価なシーケンスやすぐに計算できないシーケンスを表すのに役立ちます。これには、無限シーケンスやリアルタイム データ ストリーミングなどが含まれます。
ジェネレーターも高速である必要があります。ただし、速いということについて話すとき、私たちは通常、非常に小さな用語で話していることを覚えておいてください。したがって、ジェネレーターを使用するようにすべてのコードを実行して変更する前に、ベンチマークを実行して、それがどこで意味があるのかを確認してください。
ジェネレーターのもう 1 つの使用例は、非同期コルーチンです。 yield キーワードは値を返すだけでなく、値を受け取ります。これについて詳しくは、以下にリンクされている 2 つの優れたブログ投稿を参照してください。
5. 利回りはいつ使用できますか?
ジェネレーターは
PHP 5.5 で導入されました。これより前のバージョンの yield を使用しようとすると、キーワードに続くコードに応じてさまざまな解析エラーが発生します。したがって、このコードで解析エラーが発生した場合は、PHP を更新してください。
関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで
以上がphp の利回りとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。