ホームページ >バックエンド開発 >PHPチュートリアル >PHPジェネレーターの簡単な解析
この記事では、PHP ジェネレーターの簡単な分析を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
ジェネレーターとは
ジェネレーターを使用すると、メモリ内に配列を作成せずに、foreach ブロックにコードを記述して、一連のデータを反復処理できます。メモリ制限があるか、かなりの処理時間がかかる可能性があります。代わりに、通常のカスタム関数と同じようにジェネレーター関数を作成できます。通常の関数が 1 回だけ返すのではなく、ジェネレーターは必要に応じて何度でも生成して、反復する必要がある値を生成できます。
簡単な例は、ジェネレーターを使用して range() 関数を再実装することです。標準の range() 関数は、範囲内のすべての値を含む配列をメモリ内に生成し、その配列を返す必要があるため、複数の大きな配列が生成されます。たとえば、 range(0, 10000) を呼び出すと、メモリ使用量が 4 MB を超えます。
コード例:
<?php /** * Created by PhpStorm. * User: chenbotome@163.com * Date: 2018/7/30 * Time: 上午11:29 */ $start = xdebug_memory_usage(); $num = 10000; function rangeWithGenerators($start, $limit, $step = 1) { if ($start < $limit) { if ($step <= 0) { throw new LogicException('Step must be +ve'); } for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } else { if ($step >= 0) { throw new LogicException('Step must be -ve'); } for ($i = $start; $i >= $limit; $i += $step) { yield $i; } } } if ($argc === 1) { $iterate = rangeWithGenerators(0, $num, 1); foreach ($iterate as $value){ echo $value . "\n"; } //var_dump(iterator_to_array($iterate)); } if ($argc === 2) { $test = range(0, $num, 1); foreach ($test as $value) { echo $value . "\n"; } } $end = xdebug_memory_usage(); echo sprintf("内存消耗量%s\n", convert($end-$start)); function convert($size){ $unit=array('b','kb','mb','gb','tb','pb'); return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; }
環境
PHP7.1
Xdebug
コマンドを実行
php test.php 結果が返されます: メモリ消費量416 b
php test.php range 結果の戻り値: メモリ消費量 4 mb
テスト結果の説明
PHP での json_encode の使用法についての紹介
カールを使用して次のことを行う方法POSTでPOSTを受け取る アドレスはインターフェイスを作成するメソッドです
以上がPHPジェネレーターの簡単な解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。