@a5635268
2016-02-23T03:52:55.000000Z
字数 1489
阅读 1263
SPL
这两个类都是继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的堆栈模式和队列模式;所以放在一起来介绍;

# 类摘要SplStack extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {/* 方法 */__construct(void)// 重写了父类SplDoublyLinkedList,固定为堆栈模式,然后此处只需要传IT_MODE_DELETE或者IT_MODE_KEEP。void setIteratorMode(int $mode )/* 继承自SplDoublyLinkedList的方法 */...}
//把栈想象成一个颠倒的数组$stack = new SplStack();/*** 可见栈和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:* (1)SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP (默认值,迭代后数据保存)* (2)SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除)*/$stack->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_DELETE);$stack->push('a');$stack->push('b');$stack->push('c');$stack->offsetSet(0, 'first');//index 为0的是最后一个元素,后入后出$stack->pop(); //出栈foreach($stack as $item) {echo $item . PHP_EOL; // first a}print_R($stack); //测试IteratorMode

# 类摘要SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {/* 方法 */__construct ( void )// 出队mixed dequeue ( void )// 入队void enqueue ( mixed $value )// 重写了父类SplDoublyLinkedList,固定为堆栈模式,然后此处只需要传IT_MODE_DELETE或者IT_MODE_KEEP。void setIteratorMode ( int $mode )//其他继承的方法}
$q = new SplQueue();$q->setIteratorMode(SplQueue::IT_MODE_DELETE);//可以放任何数据类型到队列里面$q->enqueue('item1');//每次放入都是只占一个队列的位置$q->enqueue(array("FooBar", "foo"));$q->enqueue(new stdClass());$q->rewind();while($q->valid()){print_r($q->current());echo "\n";$q->next();}// 出队,先入先出,因为队列为空,所以此处报错;$q->dequeue();
