PHP的瑞士军刀SPL库

SPL库是什么

       SPL是用于解决典型问题(standard problems)的一组接口与类的集合。PHP 5.0 起内置了SPL库,PHP5.3 已逐渐的成熟。SPL库在开发环境中被内置,无需任何设置即可使用。

 

SPL库能做什么

  1. 提供数据结构(双向链表、栈、队列、堆、阵列、映射),并实现了这些数据结构的操作;
  2. 迭代器(迭代访问、过滤数据、缓存结果、控制分页);
  3. SPL函数(sql_auto_register() ...);
  4. 异常,SPL提供了多种情况下的异常类,允许使用或扩展它们;
  5. 文件处理(为文件提供一个面向对象的接口,像操作对象一样操作文件);
  6. 各种类与接口:
    1. 类 -> arrayObject 允许像数组一样操作对象;
    2. 接口 -> 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)

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部