このページについて
配列やイテレータに関するインターフェースのドキュメントリンク集です。
PHP マニュアル > 関数リファレンス
https://www.php.net/manual/ja/funcref.php
PHP マニュアル > 関数リファレンス > その他の基本モジュール > JavaScript Object Notation
https://www.php.net/manual/ja/book.json.php
PHP マニュアル > 関数リファレンス > その他の基本モジュール > Standard PHP Library (SPL)
https://www.php.net/manual/ja/book.spl.php
PHP マニュアル > 言語リファレンス
https://www.php.net/manual/ja/langref.php
配列
ArrayAccess インターフェイス
配列としてオブジェクトにアクセスするための機能のインターフェイスです。
ArrayObject クラス
このクラスは、オブジェクトを配列として動作させます。
Countable インターフェイス
Countable を実装したクラスは、 count() 関数で使用することができます。
ジェネレータ
ジェネレータ関数の見た目はふつうの関数とほぼ同じです。違うのは、値を返すのではなく、 必要なだけ値を yield することです。
ジェネレータ関数が呼ばれると、反復処理が可能なオブジェクトを返します。 このオブジェクトを (foreach ループなどで) 反復させると、 値が必要になるたびに PHP がジェネレータ関数を呼びます。 そして、ジェネレータが値を yield した時点の状態を保存しておき、 次に値が必要になったときにはそこから再開できるようにします。
yield できる値がなくなると、ジェネレータ関数は何もせず単純に終了します。 呼び出し元のコードでは、配列の要素をすべて処理し終えた後のように、そのまま処理が続きます。
イテレータ
Iterator インターフェイス
外部のイテレータあるいはオブジェクト自身から反復処理を行うためのインターフェイスです。
IteratorAggregate インターフェイス
外部イテレータを作成するためのインターフェイスです。
OuterIterator インターフェイス
OuterIterator を実装したクラスは、 イテレータ群の反復処理に使うことができます。
RecursiveIterator インターフェイス
RecursiveIterator を実装したクラスは、 イテレータ群を再帰的に反復処理するときに使うことができます。
SeekableIterator インターフェイス
Seekable イテレータです。
SPL イテレータ
SPL にはイテレータが用意されており、オブジェクトを反復処理することができます。
SPL イテレータクラスツリー
ArrayIterator
RecursiveArrayIterator
EmptyIterator
IteratorIterator
AppendIterator
CachingIterator
RecursiveCachingIterator
FilterIterator
CallbackFilterIterator
RecursiveCallbackFilterIterator
RecursiveFilterIterator
ParentIterator
RegexIterator
RecursiveRegexIterator
InfiniteIterator
LimitIterator
NoRewindIterator
MultipleIterator
RecursiveIteratorIterator
RecursiveTreeIterator
DirectoryIterator (extends SplFileInfo)
FilesystemIterator
GlobIterator
RecursiveDirectoryIterator
データ構造
SPL では、標準的なデータ構造を提供しています。 ここで、それらを実装ごとに分類してまとめます。
双方向リンクリスト
双方向リンクリスト (Doubly Linked List: DLL) は、双方向のノードへのリンクを持つノードのリストです。 イテレータの操作、両隣へのアクセス、ノードの追加や削除のコストは、 データ構造が DLL の場合は O(1) となります。 これは、スタックやキューを実装するのに適しています。
SplDoublyLinkedList
SplStack
SplQueue
ヒープ
https://www.php.net/manual/ja/class.splheap.php
https://www.php.net/manual/ja/class.splpriorityqueue.php
ヒープは、ツリー風の構造です。ヒープ特有の性質として、 個々のノードはその子ノードと等しいかそれより大きな値となります。 値の比較は、ヒープ全体の比較メソッドとして実装されているものを使用します。
SplHeap
SplMaxHeap
SplMinHeap
SplPriorityQueue
配列
配列は、データを連続的に格納してインデックス経由でアクセスできるようにした構造です。 PHP の配列と混同しないようにしましょう。PHP の配列は、 実際のところは順序つきハッシュテーブルとして実装されています。
SplFixedArray
マップ
マップは、キー/値 のペアからなるデータ構造です。 PHP の配列は、整数値/文字列を値と対応させたマップとみなすことができます。 SPL では、オブジェクトとデータを対応させるマップを提供しています。 このマップは、オブジェクトの集合として扱うことができます。
SplObjectStorage
Observer パターン
SplObserver インターフェイス
SplObserver インターフェイスを SplSubject とともに使うと、Observer パターンを実装することができます。
SplSubject インターフェイス
SplSubject インターフェイスを SplObserver とともに使うと、Observer パターンを実装することができます。
SPL 関数
iterator_apply
ユーザー関数をイテレータのすべての要素でコールする
iterator_count
イテレータにある要素をカウントする
iterator_to_array
イテレータを配列にコピーする
データ保存関連
Serializable インターフェイス
独自のシリアライズ用のインターフェイスです。
このインターフェイスを実装したクラスは __sleep() や __wakeup() をサポートしなくなります。 シリアライズが必要な場合には、自動的に serialize メソッドがコールされます。 このメソッドは __destruct() を実行しません。また、 メソッド内で明示的に書かない限りは一切の副作用を及ぼしません。 アンシリアライズされるときにはそのクラスが自動的に検知し、__construct() メソッドのかわりに適切な unserialize() メソッドがコールされます。 標準のコンストラクタを実行させたい場合は、unserialize() メソッドの中でそれをコールします。
JsonSerializable インターフェイス
JsonSerializable を実装したオブジェクトは、 json_encode() を呼んで処理されたときの自身の JSON 表現をカスタマイズできます。
あまり意識することのないクラス
Generator クラス
Generator は ジェネレータ が返すオブジェクトです。
Closure クラス
無名関数 を表すために使うクラスです。