ホームページ > バックエンド開発 > PHPの問題 > php の利回りとは何を意味しますか?

php の利回りとは何を意味しますか?

coldplay.xixi
リリース: 2023-03-01 20:16:01
オリジナル
4961 人が閲覧しました

php yield は、yield キーワードがジェネレーター関数からデータを返すことを意味します。yield ステートメントは return ステートメントとよく似ています。Yield は関数の実行を停止してリターンするのではなく、ループ ジェネレーター コードを提供します。値を返し、ジェネレーター関数の実行を一時停止します。

php の利回りとは何を意味しますか?

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 =&gt; $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 サイトの他の関連記事を参照してください。

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