5.3で追加されるSPLクラス
php5.3-200804010230で確認しましたが、PHP5.3から新たに以下のクラスが追加されているようです。Stack、Heap、Queue、Listですね。
- class SplDoublyLinkedList implements IteratorTraversableCountableArrayAccess
- class abstract SplHeap implements IteratorTraversableCountable
- class SplMaxHeap extends SplHeap implements CountableTraversableIterator
- class SplMinHeap extends SplHeap implements CountableTraversableIterator
- class SplPriorityQueue implements IteratorTraversableCountable
- class SplQueue extends SplDoublyLinkedList implements ArrayAccessCountableTraversableIterator
- class SplStack extends SplDoublyLinkedList implements ArrayAccessCountableTraversableIterator
SplStackクラスは、push/popメソッドでLIFOを実現します。
<?php /** * @see http://www.alberton.info/php_5.3_spl_data_structures.html */ $stack = new SplStack(); $stack->push('b'); $stack->push('a'); $stack->push('c'); echo $stack->pop()."\n"; echo $stack->pop()."\n"; echo $stack->pop()."\n";
SplHeapクラスは抽象クラスになっていて、その派生クラスとしてSplMaxHeap/SplMinHeapの2種類用意されているようです。
<?php /** * @see http://www.alberton.info/php_5.3_spl_data_structures.html */ $heap = new SplMaxHeap(); $heap->insert('b'); $heap->insert('a'); $heap->insert('c'); echo $heap->extract()."\n"; echo $heap->extract()."\n"; echo $heap->extract()."\n"; $heap = new SplMinHeap(); $heap->insert('b'); $heap->insert('a'); $heap->insert('c'); echo $heap->extract()."\n"; echo $heap->extract()."\n"; echo $heap->extract()."\n";
実行結果は以下の通りとなります。
$ /usr/local/lib/php53/bin/php -v PHP 5.3.0-dev (cli) (built: Apr 1 2008 16:16:28) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies $ /usr/local/lib/php53/bin/php heap.php c b a a b c $
その他、SplPriorityQueueやSplDoublyLinkedList(双方向リスト)のサンプルはLorenzo Alberton - Articles - PHP 5.3 SPL data structures: SplStack, SplHeap, SplPriorityQueue, SplDoublyLinkedListをどうぞ(手抜き)