这两个类继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的栈模式和队列模式;所以把它们放在一起介绍;stackSplStack#ClassSummarySplStackextendsSplDoublyLinkedListimplementsIterator,ArrayAccess,Countable{/*Method*/__construct(void)//重写父类SplDoublyLinkedList,固定为栈模式,然后这里只需要传IT_MODE_DELETE或IT_MODE_KEEP即可。voidsetIteratorMode(int$mode)/*继承自SplDoublyLinkedList的方法*/...}//把栈想象成一个倒置的数组$stack=newSplStack();/***栈和doubly的区别链表是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');//索引为0的是最后一个元素,后进后出$stack->pop();//弹出foreach($stackas$item){echo$item.PHP_EOL;//首先a}print_R($stack);//测试IteratorMode队列SplQueue#类摘要SplQueueextendsSplDoublyLinkedListimplementsIterator,ArrayAccess,Countable{/*method*/__construct(void)//Dequeuemixeddequeue(void)//Enqueuevoidenqueue(mixed$value)//重写父类SplDoublyLinkedList,固定为stack模式,然后这里只需要传IT_MODE_DELETEorIT_MODE_KEEPvoidsetIteratorMode(int$mode)//其他继承方法}$q=newSplQueue();$q->setIteratorMode(SplQueue::IT_MODE_DELETE);//可以把任何数据类型放入队列$q->enqueue('item1');//每次放入,只占一个队列位置$q->enqueue(array("FooBar","foo"));$q->enqueue(newstdClass());$q->rewind();while($q->valid()){print_r($q->current());回声“\n”;$q->next();}//outTeam,先进先出,因为队列为空,所以这里报错;$q->出列();
