PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? のジェネレーター (Generator) とは何ですか?使い方? PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? のジェネレーターについては、次の記事で詳しく説明していますので、お役に立てれば幸いです。
運転に関しては、スピードがすべてではありません。しかし、ウェブでは速度がすべての違いを生みます。アプリケーションが高速であればあるほど、ユーザー エクスペリエンスは向上します。この記事は PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? ジェネレーターに関するものですが、なぜ速度について話しているのでしょうか?ジェネレータが速度とメモリ管理に大きな役割を果たしていることがすぐにわかります。
ジェネレーターは PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? 5.5 で追加され、メモリ内に配列を構築せずにデータを反復処理する簡単な方法を提供します。少し混乱していますか?次に、ジェネレーターの使用が良い方法であることを示す例を挙げます。
まず、この例全体で使用する generator.php ファイルを作成します。ファイルを作成した後、コードを追加します。
<?php function getRange ($max = 10) { $array = []; for ($i = 1; $i < $max; $i++) { $array[] = $i; } return $array; } foreach (getRange(15) as $range) { echo "Dataset {$range} <br>"; }
generator.php ファイルが作成されたディレクトリで、組み込みの PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? サーバーをすぐに起動できます。
php -S localhost:8000
ブラウザを使用して http を開く場合://localhost: 8000/generator.php、次のような結果が表示されるはずです:
このコードはあまり自明ではありません。コードを少し変更してみましょう。
<?php foreach (getRange(PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX) as $range) { echo "Dataset {$range} <br>"; }
さて、上記のコードが生成できる最大値は PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX (つまり、PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? が生成できる最大値) この変更を行った後にブラウザを更新すると、今回は何かが違うことに注意してください。このジェネレータ スクリプトは警告メッセージをスローします。
悲しいことに、PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? ではメモリが不足しています。考えられる解決策としては、 を増やすことが考えられます。 php.ini ファイル内の memory_limit の上限です。しかし、公平を期すために言うと、このスクリプトは非効率的でメモリを消費します。必要なのは、効率的でメモリの消費量が少ないスクリプトです。 。
上記と同じ関数を定義し、同じ値 PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX で呼び出して、もう一度実行してみましょう。ただし、今回はジェネレーター関数を作成します。
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { yield $i; } } foreach (getRange(PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX) as $range) { echo "Dataset {$range} <br>"; }
getRange
関数を解析し、今回は値と yield
出力のみをループします。 yield
は、関数から値を返すという点で戻り値と似ていますが、唯一の違いは、yield
は必要な場合にのみ値を返し、値を変換しようとしないことです。データセット全体がメモリ内に残ります。
ブラウザにアクセスすると、ページにデータが表示されるはずです。適切な時間が与えられると、ブラウザーは最終的にデータを表示します。
注: ジェネレーターは関数内でのみ使用できます。
巨大なデータ セット (ログ ファイルなど) や大規模なデータベースの結果セットを解析したり、計算を実行したりする必要がある状況に遭遇することがあります。 。このすべてのデータをメモリにロードする必要はありません。対応するメモリ状態を可能な限り保存する必要があります。データが大きい必要はありません。データがどれほど小さくても、ジェネレーターは効率的です。忘れないでください。私たちの目標は、メモリの使用量を減らしてできるだけ早くデータを処理することです。
データがキーと値に基づいている場合、データの説得力が高まる場合があります。ジェネレーターを使用する場合、次のようなキーと値のペアを生成することがあります。
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { $value = $i * mt_rand(); yield $i => $value; } }
その後、このキーと値のペアを他の配列と同じように使用できます。
<?php foreach (getRange(PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX) as $range => $value) { echo "Dataset {$range} has {$value} value<br>"; }
ジェネレータはパラメータを受け取ることもできます。これは、ジェネレーターを使用すると、パラメーターをコマンドまたは他の関数としてジェネレーターに挿入できることを意味します。たとえば、ジェネレーターに値を送信して、ジェネレーターの実行を停止したり、出力を変更したりします。上記の getRange
関数を使用すると、これを実現できます。
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { $injected = yield $i; if ($injected === 'stop') return; } }
注入されたこの値を送信するには、次のようにします。
<?php $generator = getRange(PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX); foreach ($generator as $range) { if ($range === 10000) { $generator->send('stop'); } echo "Dataset {$range} <br>"; }
注: ジェネレーター内で return を使用すると、ジェネレーターから飛び出します。
PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX を使用するのは少しやりすぎですが、私にとって、PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方?_INT_MAX は 2147483647# です。 ## つまり:
24 億 474 万 418 万 3647ジェネレーターはメモリを使用しますもっと効率的。しかし、乱用すると、記憶関連の問題を引き起こす可能性もあります。
ジェネレーターは無視できない大幅なパフォーマンスの向上をもたらします。ほとんどの場合、コードを実行するために高度な構成のサーバーは必要ありません。少しリファクタリングを行うだけです。ジェネレーターは非常に便利なので、もっと活用する必要があります。
英語の元のアドレス: https://scotch.io/tutorials/ Understanding-php-generators
推奨学習: 「PHPのジェネレーターとは何ですか?使い方?のジェネレーターとは何ですか?使い方? ビデオ チュートリアル 」
以上がPHPのジェネレーターとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。