php SPL学习

时间:2022-11-10 15:02:44
数据结构
SplDoublyLinkedList - 该SplDoublyLinkedList类提供了一个双向链表的主要功能
SplStack - 该SplStack类提供了一种使用双向链表实现栈的主要功能
SplQueue - 该SplQueue类提供了一种使用双向链表实现队列的主要功能
SplHeap - 该SplHeap类提供了堆的主要功能
SplMaxHeap - 该SplMaxHeap类提供了堆的主要功能,保持最大的顶部
SplMinHeap - 该SplMinHeap类提供了堆的主要功能,保持最低限度的顶部
SplPriorityQueue - 该SplPriorityQueue类提供了优先队列的主要功能,采用了最大堆实现
SplFixedArray - 该SplFixedArray类提供阵列的主要功能。一个SplFixedArray和正常PHP数组之间的主要区别在于,SplFixedArray长度是固定的,并允许范围为指标内的整数。的优点在于,它允许较快的数组实现
SplObjectStorage - 该SplObjectStorage类从对象到的数据提供地图或忽略的数据,一个对象集。此双用途可以是在涉及需要唯一地识别物体的许多情况下是有用的 迭代器
AppendIterator - 这个迭代器能陆续遍历几个迭代器
ArrayIterator - 这个迭代器允许在遍历数组和对象时删除和更新值与键
CachingIterator - 这个对象支持对另一个迭代器缓存的迭代
CallbackFilterIterator - 返回过滤器接口类
DirectoryIterator - 该DirectoryIterator类提供了查看文件系统目录内容的简单接口
EmptyIterator - 空迭代器
FilesystemIterator - 文件系统迭代
FilterIterator - 这个抽象类的遍历并过滤出不想要的值.这个类应该被实现了迭代过滤器的类继承 FilterIterator::accept()方法必须被子类实现.
GlobIterator - 遍历一个文件系统行为类似于 glob()
InfiniteIterator - 无限迭代器允许一个无限循环访问迭代器,而无需在到达其最终手动倒带迭代器
IteratorIterator - 这个迭代器封装允许任何转换即是可遍历到一个Iterator。要明白,没有实现迭代大多数类都有理由,最有可能的,他们不允许完整迭代器的功能集是很重要的。如果是这样,应提供技术,以防止误操作,否则指望异常或致命错误
LimitIterator - LimitIterator类允许遍历一个 Iterator 的限定子集的元素
MultipleIterator - 其依次遍历所有连接迭代的迭代器
NoRewindIterator - 这个迭代器无法倒带
ParentIterator - 这个扩展FilterIterator允许使用RecursiveIteratorIterator递归迭代,只显示那些有子元素的
RecursiveArrayIterator - 该迭代器允许未设置和修改值和键在遍历数组和对象以相同的方式为ArrayIterator。另外,可以遍历当前重复条目
RecursiveCachingIterator - 该RecursiveCachingIterator类
RecursiveCallbackFilterIterator - 该RecursiveCallbackFilterIterator类
RecursiveDirectoryIterator - 该RecursiveDirectoryIterator提供一个接口对文件系统的目录遍历递归
RecursiveFilterIterator - 这个抽象迭代器过滤掉不需要的值了RecursiveIterator。此类应扩展以实现自定义过滤器。递归FilterIterator:: accept()方法必须在子类实现。
RecursiveIteratorIterator - 可用于通过递归迭代器进行迭代
RecursiveRegexIterator - 这种递归迭代器可以通过正则表达式过滤另一个递归迭代器
RecursiveTreeIterator - 允许迭代过RecursiveIterator生成一个ASCII图形树
RegexIterator - 这种迭代器可以用于过滤基于正则表达式的另一个迭代器 接口
Countable - 类实现 Countable 可被用于 count() 函数.
OuterIterator - 实施OuterIterator类可用于遍历迭代器
RecursiveIterator - 实施RecursiveIterator类可用于递归迭代迭代器
SeekableIterator - 查找迭代器 异常
BadFunctionCallException - 如果回调指的是未定义的功能或抛出异常如果某些参数丢失
BadMethodCallException - 如果回调是指一个未定义的方法或抛出异常如果某些参数丢失
DomainException - 如果值不符合规定的有效数据域的异常
InvalidArgumentException - 如果一个参数是预期的类型不抛出异常
LengthException - 如果长度为无效异常抛出
LogicException - 异常表示程序逻辑错误。这种异常应直接导致在你的代码修复
OutOfBoundsException - 如果值不是一个有效的密钥抛出异常。这表示不能在编译时检测到错误
OutOfRangeException - 当被要求非法索引抛出异常。这表示应该在编译时检测到错误
OverflowException - 添加元素,以一个完整的容器时抛出异常
RangeException - 抛出异常程序执行期间,指示范围内的误差。通常,这意味着有比下溢/溢出以外的算术错误。这是DomainException的运行时版本
RuntimeException的 - 如果发生只能在运行时发现了一个错误的异常
UnderflowException - 一个空的容器上执行无效操作时,比如移除元素抛出异常
UnexpectedValueException - 如果值不以一组值相匹配的异常。这通常发生在一个函数调用另一个函数,并期望返回值是一个某种类型或价值不包括算术或缓冲相关的错误 SPL函数
class_implements - 返回指定的类实现的所有接口。
class_parents - 返回指定类的父类。
class_uses - 返回给定类使用的特质
iterator_apply - 为迭代器中每个元素调用一个用户自定义函数
iterator_count - 计算迭代器中元素的个数
iterator_to_array - 将迭代器中的元素拷贝到数组
spl_autoload_call - 尝试调用所有已注册的__autoload()函数来装载请求类
spl_autoload_extensions - 注册并返回spl_autoload函数使用的默认文件扩展名。
spl_autoload_functions - 返回所有已注册的__autoload()函数。
spl_autoload_register - 注册给定的函数作为__autoload的实现
spl_autoload_unregister - 注销已注册的__autoload()函数
spl_autoload - __autoload()函数的默认实现
spl_classes - 返回所有可用的SPL类
spl_object_hash - 返回指定对象的哈希ID 文件处理
SplFileInfo - 该SplFileInfo类提供了一个高层次的面向对象的接口信息,单个文件
SplFileObject - SplFileObject类为文件提供了一个面向对象接口.
SplTempFileObject - 该SplTempFileObject类提供了一个临时文件的面向对象的接口 各种类及接口
ArrayObject的 - 这个类允许对象的数组
SplObserver - 该SplObserver接口用于一起SplSubject实现观察者设计模式
SplSubject - 该SplSubject接口用于一起SplObserver实现观察者设计模式

/*
* SplDoublyLinkedList
*
* SplDoublyLinkedList ::add - 添加/插入新值指定索引处
SplDoublyLinkedList ::bottom - 在从双重链接列表的开头的节点窥视(或翻译为吧指针移到底部,即为双向链表所以是按照当前你处理的方法来移动到底部)
SplDoublyLinkedList :: __construct - 构造一个新的双向链表
SplDoublyLinkedList ::count - 计算在双向链表元素的数量。
SplDoublyLinkedList :: current - 返回当前数组节点值
SplDoublyLinkedList :: getIteratorMode - 设置返回迭代的方式
SplDoublyLinkedList ::isEmpty - 检查是否双向链表为空。
SplDoublyLinkedList ::key - 返回当前节点索引
SplDoublyLinkedList ::next - 移动到下一个节点
SplDoublyLinkedList :: offsetExists - 返回请求$index是否存在
SplDoublyLinkedList :: offsetGet - 在指定的$index返回值
SplDoublyLinkedList :: offsetSet - 设置在指定的$index 到$newval值
SplDoublyLinkedList :: offsetUnset - 在指定$index取消将值
SplDoublyLinkedList ::pop - 从双向链表的末尾压出一个节点
SplDoublyLinkedList ::prev - 移动到前一个条目
SplDoublyLinkedList ::push - 在双向链表的末尾压入一个节点
SplDoublyLinkedList :: rewind - 倒迭代器回到起点
SplDoublyLinkedList ::serialize - 序列化存储
SplDoublyLinkedList :: setIteratorMode - 设置迭代的方式
SplDoublyLinkedList ::shift - 从双向链表的开始压出(移除)一个节点
SplDoublyLinkedList ::top - 从双向链表的最后节点偷窥
SplDoublyLinkedList ::unserialize - Unserializes存储
SplDoublyLinkedList ::unshift - 预先考虑双向链开始压入(移入)一个节点
SplDoublyLinkedList ::valid - 检查是否双向链表中是否有更多的节点
*
*
*/

$list = new SplDoublyLinkedList();
$list->push('a');
$list->push('b');
$list->push('c');
$list->push('d');

$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current()."\n";
}