1.什么是spl

解决常见问题

a数据建模/数据结构 解决数据怎么存储的问题

b元素遍历 数据怎么查看的问题

c常用方法的统一调用 通用方法(数组。集合的大小)自定义遍历

c类定义在自动装 让php程序适应大型项目的管理要求,把功能的实现分散到不同文件中

2.spl的基本框架

数据结构

a.双向链表

代码事例:

$obj = new SplDoublyLinkedList();

$obj->push(2);

$obj->unshift(10);

print_r($obj);

$obj->rewind();

echo $obj->current();

if($obj->valid()){ //如果当前节点是有效节点,valid则返回true

echo "valid list\n";

}else{

echo "invalid list\n";

}

$this->pop();//把top位置的节点从链表中删除,并返回。如果current正好指向top位置,那么调用pop后current会失败。

$this->shift();//把bottom位置的节点从列表中删除,并返回。

当前节点操作 rewind(用于把节点指针指向bottom)、current(获取当前节点) next(获取下一个节点) prev (获取上一个节点)

增加节点操作 push(新节点添加到链表的顶部top[依次增加]) unshift(新节点添加到链表的底部bottom[从初始位置增加])

删除节点操作 pop() shift

定位操作 bottom(获得链表底部元素,当前指针位置不变) top (获得链表顶部元素,当前指针位置不变)

特定节点操作 offsetExists offsetGet offsetSet offsetUnset

堆栈

继承自SplDoublyLinkedList类的splstackl类

操作:push 压入堆栈(存入) pop 退出堆栈(取出)

$obj = new SplStack();

$obj->push(1);

$obj->push(2);

$obj->push(3);

$obj->push(4);

//$obj->offsetSet(0,'c');//堆栈的offset=0是Top所在的位置,offset=1是top位置节点靠近bottom位置的相邻节点,依次类推

$obj->rewind();//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当指针指向top所在的位置,而双向链表调用之后指向bottom所在的位置

//遍历堆栈

while($obj->valid()){

echo $obj->key()."=>".$obj->current()."\n";

$obj->next();//next操作从不删除链表中删除元素

}

//删除堆栈

$popobj = $obj->pop();

echo $popobj;//

队列

队列和堆栈刚好相反,最先进入队列的元素会最先走出队列,就像排队打饭。

继承自SplDoublyLinkedList类的splqueue类

操作

enqueue:进入队列

dequeue:退出队列

$obj = new SplQueue();

$obj->enqueue(1);

$obj->enqueue(2);

$obj->enqueue(3);

$obj->enqueue(4);

$obj->offsetSet(0,'c');//队列的offset=0是Bottom所在的位置,offset=1是TOP方向的相邻节点,依次类推,和堆栈相反

$obj->rewind();//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当指针指向top所在的位置,而双向链表调用之后指向bottom所在的位置

//遍历队列

while($obj->valid()){

echo $obj->key()."=>".$obj->current()."\n";

$obj->next();//next操作从不删除链表中删除元素

}

//删除队列元素

$popobj = $obj->dequeue();

echo $popobj;

堆 降序堆 升序堆 优先级队列 定义数组 对象容器

基础接口 基础函数

迭代器

通过某种统一的方式遍历链表或者数组中的元素的过程叫做迭代遍历,而这种统一的遍历工具我们叫做迭代器

php中迭代器是通过Iterator接口定义的。

异常 其他