PHP的瑞士军刀SPL库
SPL库是什么
SPL是用于解决典型问题(standard problems)的一组接口与类的集合。PHP 5.0 起内置了SPL库,PHP5.3 已逐渐的成熟。SPL库在开发环境中被内置,无需任何设置即可使用。
SPL库能做什么
- 提供数据结构(双向链表、栈、队列、堆、阵列、映射),并实现了这些数据结构的操作;
- 迭代器(迭代访问、过滤数据、缓存结果、控制分页);
- SPL函数(sql_auto_register() ...);
- 异常,SPL提供了多种情况下的异常类,允许使用或扩展它们;
- 文件处理(为文件提供一个面向对象的接口,像操作对象一样操作文件);
- 各种类与接口:
- 类 -> arrayObject 允许像数组一样操作对象;
- 接口 -> splObserver 管擦者模式的接口实现;
SPL库之数据结构
1. 双向链表,一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。
1.1 类:SplDoublyLinkedList 摘要
class SplDoublyLinkedList implements Iterator , ArrayAccess , Countable
{
public __construct ( void )
public add ( mixed
$index, mixed$newval) : void // 新增元素public bottom ( void ) : mixed // 尾部元素
public count ( void ) : int // 元素个数
public current ( void ) : mixed // 当前元素
public getIteratorMode ( void ) : int // 取得迭代模式
public isEmpty ( void ) : bool // 是否为空
public key ( void ) : mixed // 当前节点索引
public next ( void ) : void // 移动到下一元素
public offsetExists ( mixed
$index) : bool // 指定节点是否存在public offsetGet ( mixed
$index) : mixed // 取得指定节点值public offsetSet ( mixed
$index, mixed$newval) : void // 设置指定节点值public offsetUnset ( mixed
$index) : void // 注释指定节点public pop ( void ) : mixed // 从尾部弹出元素
public prev ( void ) : void // 移动到上条记录
public push ( mixed
$value) : void // 添加元素到尾部public rewind ( void ) : void // 将指针指向到迭代开始处
public serialize ( void ) : string // 序列化
public setIteratorMode ( int
$mode) : void // 设置迭代模式public shift ( void ) : mixed // 从头部移除元素
public top ( void ) : mixed // 头部节点
public unserialize ( string
$serialized) : void // 反序列化public unshift ( mixed
$value) : void // 添加元素到头部public valid ( void ) : bool // 检查是否还有节点
}
1.2 简单使用
$v) {$doublyLinkedList->add($k, $v);
}$doublyLinkedList->pop(); // 弹出链表最后一个元素
$doublyLinkedList->push(5); // 在链表最后添加元素$doublyLinkedList->shift(); // 弹出链表开头的元素
$doublyLinkedList->unshift(1); // 在链表头部添加元素$doublyLinkedList->rewind(); // 指向链表第一个元素// 遍历
while($doublyLinkedList->valid()) {echo sprintf("key:%s | value:%s \n",$doublyLinkedList->key(),$doublyLinkedList->current());$doublyLinkedList->next();
}
2. 栈,使用双向链表来提供栈的主要功能
2.1 类:SplStack 摘要
class SplStack extends SplDoublyLinkedList implements Iterator, arrayAccess, Countable
{
setIteratorMode( int $mode ); // 设置迭代模式(栈的模式是后进先出 )
}
2.2 简单使用
push(4);
$stack->add(4,5);$stack->rewind();while($stack->valid()){echo $stack->current(),"\n";$stack->next();
}
3.队列,使用双向链表来提供队列的主要功能
3.1 类:SplQueue 摘要
class SplQueue extends SplDoublyLinkedList implements Iterator, arrayAccess, CountAble
{
public dequeue() : mixed; // 弹出第一个元素
public enqueue( mixed $value ); // 添加一个元素进入队列
setIteratorMode( int $mode ); // 设置迭代模式
}
3.2 简单使用
insert([9, 11]);
$h->insert([0, 1]);
$h->insert([1, 2]);
$h->insert([1, 3]);
$h->insert([1, 4]);
$h->insert([1, 5]);
$h->insert([3, 6]);
$h->insert([2, 7]);
$h->insert([3, 8]);
$h->insert([5, 9]);
$h->insert([9, 10]);for ($h->top(); $h->valid(); $h->next()) {list($parentId, $myId) = $h->current();echo "$myId ($parentId)\n";
}
5. 优先阵列(TODO)
6. 固定阵列(TODO)
7. 映射(TODO)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
