多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# [SplStack](https://www.php.net/manual/zh/class.splstack.php#class.splstack) >[danger] 重写setIteratorMode与__construct方法其他继承自SplDoublyLinkedList类 > SplDoublyLinkedList不同在于SplDoublyLinkedList::rewind();是头部第一个元素,而SplStack::rewind();是尾部最后一个元素 > 遍历时遵循先入后出原则从bottom至top方向 ``` //堆栈,先进后出 $stack = new SplStack();//继承自SplDoublyLinkedList类 $stack[] = 1;//[0=>1] $stack[] = 2;//[0=>1,1=>2] $stack[] = 3;//[0=>1,1=>2,2=>3] //$stack->add(4,5); //报错超出偏移量 $stack->add(3,4); //添加一个元素到尾部 $stack->push("a"); $stack->push("b"); //[0=>1,1=>2,2=>3,3=>4,4=>'a',5=>'b'] //尾部弹出一个元素 echo $stack->pop(); echo $stack->pop(); //[0=>1,1=>2,2=>3,3=>4] $stack->offsetSet(0,'B');//等同$stack[0]='B'; //[0=>1,1=>2,2=>3,3=>'B'] //将指针指向迭代开始处 Iterator //双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置 $stack->rewind(); echo 'current:'.$stack->current();//current:B $stack->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点 echo 'current:'.$stack->current();//current:3 $stack->rewind(); while($stack->valid()){ echo $stack->current(),"\n"; $stack->next();//B 3 2 1 } for ($stack->rewind(); $stack->valid(); $stack->next()) { echo $stack->current();//B 3 2 1 } ```