SPL是Standard PHP Library(PHP标准库)的缩写。
官网说,SPL是用来解决典型问题(common problems)的一组接口与类的集合。
那么,什么是common problems呢?- 数据结构
解决数据怎么存储问题
- 元素遍历
数据怎么查看
- 常用方法的统一调用
数组、集合大小
自定义遍历
- 类自动加载
spl_autoload_register
包含哪些内容?
- 数据结构
- 基础接口
- 基础函数
- 迭代器
- 异常
- 其它
SPL规定,所有实现了Iterator接口的class,都可以用在foreach Loop中。Iterator接口中包含5个必须实现的方法:
interface Iterator extends Traversable{
# 返回当前元素
public mixed current ( void );
# 返回当前元素的键
public scalar key ( void );
# 向前移动到下一个元素
public void next ( void );
# 返回到迭代器的第一个元素
public void rewind ( void );
# 检查当前位置是否有效
public boolean valid ( void );
}
ArrayAccess 数组式访问接口
实现ArrayAccess接口,可以使得object像array那样操作。ArrayAccess接口包含四个必须实现的方法:
interface ArrayAccess {
//检查一个偏移位置是否存在
public mixed offsetExists ( mixed $offset );
//获取一个偏移位置的值
public mixed offsetGet( mixed $offset );
//设置一个偏移位置的值
public mixed offsetSet ( mixed $offset );
//复位一个偏移位置的值
public mixed offsetUnset ( mixed $offset );
}
IteratorAggregate 聚合式迭代器接口
假设对象A实现了上面的ArrayAccess接口,这时候虽然可以像数组那样操作,却无法使用foreach遍历,除非实现了前面提到的Iterator接口。
另一个解决方法是,有时会需要将数据和遍历部分分开,这时就可以实现IteratorAggregate接口。它规定了一个getIterator()方法,返回一个使用Iterator接口的object。
IteratorAggregate extends Traversable {
/* 获取一个外部迭代器 */
abstract public Traversable getIterator ( void )
}
示例:
注意: 虽然都继承自Traversable,但这是一个无法在 PHP 脚本中实现的内部引擎接口。我们直接使用IteratorAggregate 或 Iterator 接口来代替它。
RecursiveIterator这个接口用于遍历多层数据,它继承了Iterator接口,因而也具有标准的current()、key()、next()、 rewind()和valid()方法。同时,它自己还规定了getChildren()和hasChildren()方法。The getChildren() method must return an object that implements RecursiveIterator。
SeekableIteratorSeekableIterator接口也是Iterator接口的延伸,除了Iterator的5个方法以外,还规定了seek()方法,参数是元素的位置,返回该元素。如果该位置不存在,则抛出OutOfBoundsException。
Countable这个接口规定了一个count()方法,返回结果集的数量。
SPL数据结构数据结构是计算机存储、组织数据的方式。
SPL提供了双向链表、堆栈、队列、堆、降序堆、升序堆、优先级队列、定长数组、对象容器。
参考文献:https://www.cnblogs.com/52fhy/p/5573757.html