這兩個類都是繼承自`SplDoublyLinkedList`,分別派生自`SplDoublyLinkedList`的堆棧模式和隊列模式;所以放在一起來介紹;
## 堆棧SplStack
![3846779171.jpg-31.4kB][1]
```php
# 類摘要
SplStack extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
/* 方法 */
__construct(void)
// 重寫了父類SplDoublyLinkedList,固定為堆棧模式,然后此處只需要傳IT_MODE_DELETE或者IT_MODE_KEEP。
void setIteratorMode(int $mode )
/* 繼承自SplDoublyLinkedList的方法 */
...
}
```
```php
//把棧想象成一個顛倒的數組
$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
![804515552.png-10.1kB][2]
```php
# 類摘要
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 )
//其他繼承的方法
}
```
```php
$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();
```
[1]: http://static.zybuluo.com/a5635268/eu2xtc2vowfjztlqkvkjlh48/3846779171.jpg
[2]: http://static.zybuluo.com/a5635268/f3l026zxxn2u55u546ewu238/804515552.png
- 現代化PHP特性
- php7常用特性整理
- 反射機制Reflection
- 依賴注入與服務容器
- 抽象類與接口
- 類多繼承的替代方案Traits
- 類的延遲綁定(后期綁定)
- 生成器語法
- 匿名函數和閉包
- 匿名類
- 理解php的output buffer
- 斷言ASSERT
- 魔術方法小結
- Zend Opcache字節碼緩存
- 內置的http服務器
- SPL標準庫
- 【SPL標準庫專題(1)】SPL簡介
- 【SPL標準庫專題(2)】Iterator
- 【SPL標準庫專題(3)】Classes
- 【SPL標準庫專題(4)】Exceptions
- 【SPL標準庫專題(5)】Datastructures:SplDoublyLinkedList
- 【SPL標準庫專題(6)】Datastructures:SplStack & SplQueue
- 【SPL標準庫專題(7)】Datastructures:SplPriorityQueue
- 【SPL標準庫專題(8)】Datastructures:SplHeap & SplMaxHeap & SplMinHeap
- 【SPL標準庫專題(9)】Datastructures:SplFixedArray
- 【SPL標準庫專題(10)】Datastructures:SplObjectStorage
- PHPcomposer使用手札[ing]
- PHP中的多態
- 通過命名空間實現自動加載的框架雛形
- 日期與金額
- PHPstorm使用攻略
- 筆記本