ホームページ  >  記事  >  バックエンド開発  >  PHP デザインパターンの話: イテレータパターン (2)_PHP チュートリアル

PHP デザインパターンの話: イテレータパターン (2)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:44:08730ブラウズ

InfiniteIterators、NoRewindIterators などを通常の配列と矛盾させることができるため、イテレータはオブジェクト セットよりも優れた抽象化であることに注意してください。したがって、Iterator には count() 関数などの関数がありません。
SPL イテレータの完全なリストは、公式 PHP マニュアルにあります。 PHP の強力なサポートのおかげで、イテレータ パターンを使用する作業のほとんどが標準実装に含まれています。次のコード例では、標準の Iterator と RecursiveIterators の機能を利用しています。

private 今日の「PHP デザイン パターン」シリーズの主役は、非常に一般的なプロセス、つまりオブジェクト グラフの未知の部分にあるオブジェクト (またはスカラー) のセットの反復に関する抽象化を提供する Iterator パターンです。反復は、配列プロパティ、コレクション オブジェクト、配列、さらにはクエリ結果セットの反復など、いくつかの異なる方法で実行できます。

迭代器模式
オブジェクトの世界では、イテレータ パターンは配列のような関数を維持し、非侵入的なオブジェクト ファセットとしてみなされる必要があり、多くの場合、クライアント クラスはイテレータ インターフェイスを参照して実際のオブジェクト実装から分離されます。可能な限り、将来変更される可能性のある具体クラスまたは抽象クラスの代わりに、イテレータへの参照を渡すことができます。
図 1 Iterator パターン
参加者:
◆クライアント: Iterator パターンのメソッドを参照して、一連の値またはオブジェクトに対してループを実行します。
◆Iterator (イテレーター): next()、isFinished()、current() などのメソッドを含む、反復プロセスの抽象化。
◆ConcreteIterators: 配列、ツリー、組み合わせ、コレクションなどの特定のオブジェクトのセットに反復を実装します。
Traversable インターフェイスを通じて、PHP はイテレーター モードをネイティブにサポートします。このインターフェイスは、Iterator と IteratorAggregate によって拡張され、一連の標準メソッドを定義するだけでなく、各 Traversable オブジェクトをそのまま foreach () に渡すことができます。 foreach はイテレータのメイン クライアントであり、Iterator 実装は実際のイテレータであり、IteratorAggregate は他の役割を持つ Traversable オブジェクトであり、 getIterator() メソッドを通じて Iterator を返します。

PHP架构

標準 PHP ライブラリは、PHP にバンドルされている唯一の汎用オブジェクト指向ライブラリであり、追加のインターフェイスとパブリック クラスを定義します。 OuterIterator 実装は、Iterator を装飾します。CachingIterator と LimitIterator は、このインターフェイスの 2 つの例です。
RecursiveIterator は、ツリー構造用に実装された Iterator インターフェイスの拡張機能であり、反復内の現在の要素のサブオブジェクトが存在するかどうかを確認する一連の追加メソッドを定義します。 RecursiveArrayIterator および RecursiveDirectoryIterator は、このインターフェイスの実装の例です。これらのタイプのイテレータは、そのまま使用することも、RecursiveIteratorIterator を使用して通常のイテレータ コントラクトにブリッジすることもできます。このOuterIterator実装は、構築パラメータに応じて深さ優先または幅優先のトラバーサルを実行します。
RecursiveIteratorIterator を使用する場合は、それを foreach に渡すことができます。RecursiveIterator とそのスーパーセット Iterator のさまざまな使用法を理解するには、次のコード例を参照してください。最後に、SeekableIterators は、seek() メソッドをコントラクトに追加します。このメソッドは、Iterator の内部状態を特定の反復ポイントに移動するために使用できます。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478776.html技術記事通常の配列と一貫性を持たずに InfiniteIterators、NoRewindIterators などを作成できるため、イテレータはオブジェクト セットよりも優れた抽象化であることに注意してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。