ホームページ  >  記事  >  バックエンド開発  >  PHP55 新機能イールドジェネレーター

PHP55 新機能イールドジェネレーター

WBOY
WBOYオリジナル
2016-07-28 08:27:011180ブラウズ

php 公式ドキュメントの出力 http://php.net/manual/zh/ language.generators.overview.php

参考: http://laravelacademy.org/post/4317.html

ジェネレーターは、より簡単な単純なオブジェクト反復を実装する方法です。Iterator インターフェイスを実装するクラスを定義する場合と比較して、パフォーマンスのオーバーヘッドと複雑さが大幅に軽減されます。

ジェネレーターを使用すると、メモリ内に配列を作成せずに、foreach ブロックにコードを記述してデータのセットを反復処理できます。これにより、メモリの制限に達したり、かなりの処理時間がかかってしまいます。代わりに、通常のカスタム関数と同じようにジェネレーター関数を作成できます。通常の関数が 1 回だけ返すのではなく、ジェネレーターは必要に応じて何度でも生成して、反復する必要がある値を生成できます。

<code><span>$length</span> = <span>1000000</span>;
<span>//生成器</span><span>foreach</span> (yieldTest(<span>$length</span>) <span>as</span><span>$v1</span>) {
    <span>echo</span><span>$v1</span>;
}
<span><span>function</span><span>yieldTest</span><span>(<span>$length</span>)</span> {</span><span>for</span>(<span>$i</span> = <span>0</span>; <span>$i</span> < <span>$length</span>; <span>$i</span>++) {
        <span>yield</span><span>$i</span> . <span>'Camel'</span>;
    }
}

<span>/*
迭代器
以下的代码会抛出错误:
PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /var/www/test/90/yield/demo01.php on line 38
*/</span><span>foreach</span>(iteratorTest(<span>$length</span>) <span>as</span><span>$v2</span>) {
    <span>echo</span><span>$v2</span>;
}
<span><span>function</span><span>iteratorTest</span><span>(<span>$length</span>)</span> {</span><span>$data</span> = [];
    <span>for</span>(<span>$i</span> = <span>0</span>; <span>$i</span> < <span>$length</span>; <span>$i</span>++) {
        <span>$data</span>[] = <span>$i</span> . <span>'Camel'</span>;
    }
    <span>return</span><span>$data</span>;
}</code>

Excel の表データの操作など、特定の方法で大量のデータを計算する場合、パフォーマンスへの影響はさらに大きくなります。現時点では、ジェネレーターを使用すると、貴重なメモリ領域を占有することなく、メモリの使用量を減らすことなく、後続の値を即座に計算して生成できます。

')​​.addClass('事前番号付け').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

上記では、php55 の新機能である Yield Generator を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。