▼リスト1 簡単なインタフェースと実装クラスの例 ▼リスト2 ArrayAccessとCountableのインタフェースを実装したクラスの例 container[] = $value; } else { $this->container[$offset] = $value; } } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetUnset($offset) { unset($this->container[$offset]); } public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } } ?> ▼リスト3 ArrayObjectを使う例 "foo", "two" => "bar", "three" => "buz", ); $arrayObject = new ArrayObject($array); echo $arrayObject["one"] . PHP_EOL; // foo echo $arrayObject->count() . PHP_EOL; // 3 foreach ($arrayObject as $key => $value) { echo "{$key} => {$value}" . PHP_EOL; } ?> ▼リスト4 2つのイテレータを使った例 limit = $limit; parent::__construct($iterator); } public function accept() { if (is_file(parent::current()) && filectime(parent::current()) > time() - $this->limit) return true; return false; } } // 1日以内に作成されたファイルを一覧で取得する $path = dirname(__FILE__) . "/*"; $dateFilterIterator = new dateFilterIterator(new GlobIterator($path), 24 * 60 * 60); foreach ($dateFilterIterator as $filename) { echo $filename . PHP_EOL; } ?> ▼リスト5 IteratorAggregateを使った例 array = $array; } // イテレータを返す public function getIterator() { return new ArrayIterator($this->array); } } $myList = new MyList(array("foo", "bar", "baz")); foreach ($myList as $item) { echo $item; } ?> ▼リスト6 SplQueueを使用した例 setIteratorMode(SplQueue::IT_MODE_DELETE); $queue[] = "いち"; $queue[] = "に"; $queue[] = "さん"; echo $v->dequeue(); // "いち" foreach ($queue as $v) { echo $v . PHP_EOL; // "に" と "さん" } ▼リスト7 SqlPriorityQueueを使用した例 setExtractFlags(SplPriorityQueue::EXTR_BOTH); // 値、その優先度の順で引数を渡す $queue->insert('1番目', '*'); $queue->insert('2番目', '**'); $queue->insert('3番目', '***'); $queue->insert('4番目', '****'); foreach ($queue as $v) { print_r($v); // 優先度の「文字列の長い順」で表示する echo PHP_EOL; } ?> ▼リスト8 SplFileObjectを使用した例 getFilename(); // ファイル名を取得 // ファイルの内容を出力する foreach ($file as $line) { echo $line . PHP_EOL; } ?> ▼リスト9 spl_autoload_register( )関数を使用したオートロードの例