11章ストリーム
PHPのストリームは、データリソースへの一般的なインターフェイスを表し、連続的な方法で書き込んだり読み込んだりすることができます。内部的には、各ストリームはバケツと呼ばれるオブジェクトの集合で表されます。各バケツは、基本的なストリームからのデータのチャンクを表し、図11-1に示すような、昔ながらのバケツリレーをデジタルで再現したようなものとして扱われます。
バケツリレーは、川、小川、湖、井戸から火元まで水を運ぶためによく使われます。ホースで水を運ぶことが不可能な場合、人々は列をなしてバケツを次から次へと渡して消火にあたりました。ある人が水源でバケツに水を入れ、次に並んでいる人にバケツを渡します。列に並んだ人は動かず、バケツに入った水を人から人へと順番に運び、最後の1人が火に水をかけます。このプロセスは、火が消えるか、水源が尽きるまで続きます。
PHPを使って消火活動をしているわけではありませんが、ストリームの内部構造は、バケツリレーに似ています。これは、データを処理するコードのどの要素においても、1つのチャンク(バケツ)としてデータを渡していくからです。
ジェネレータもこのパターンに似ています†1。データのコレクション全体を一度にメモリにロードするのではなく、ジェネレータはデータをより小さなチャンクに分割し、一度に1つのデータを操作する方法を提供します。これにより、PHPアプリケーションはシステムメモリを使い果たしてしまうほど大きなデータを操作できるようになります。ストリームは、離散的なデータポイントのコレクションや配列ではなく、連続的なデータを扱うことを除けば同様の機能を提供します。 ...
Get PHPクックブック ―モダンPHPによるWebアプリケーション実用レシピ集 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.