跳转到内容

PHP标准库

维基百科,自由的百科全书

这是本页的一个历史版本,由Xnotepad留言 | 贡献2010年7月14日 (三) 16:56 建立内容为“SPL是Standard PHP Library的缩写,即PHP标准库。这是PHP5.0之后新添加的重要库。它提供了一系列的接口(interface)和类(class...”的新頁面)编辑。这可能和当前版本存在着巨大的差异。

(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)

SPL是Standard PHP Library的缩写,即PHP标准库。这是PHP5.0之后新添加的重要库。它提供了一系列的接口(interface)和类(classes)解决网站开发中普遍碰到的问题。源码在ext/spl目录下。

介绍

SPL主要提供了以下几个方面的内容:

  1. iterator 迭代器,这是SPL中最重要的内容。它提供了一系列的接口和内置迭代器类。
  1. exception 异常类,它声明一了组和C++标准的异常类。
  1. Observer 观察者模式,观察者模式在MVC中经常用到。
  1. 以及一些单体函数。

SPL主要的类

主要接口

  1. ArrayAccess 其功能是使类可以像PHP中的数组一样操作。有点类似于.net平台的index操作。
  1. Traversable 是Zend引擎的内置接口,它是能让类用于foreach语句的接口,但是在PHP中并不能直接实现Traversable。只能间接地通过Iterator或IteratorAggregate接口实现。
  1. IteratorAggregate(继承Traversable,是他的儿子)是除Iterator之外另一个从Traversable接口中继承而来的。其接口也很简单,只有一个函数。就是返回一个迭代器实例。
  1. Iterator(也是继承Traversable,是他的儿子),SPL中大部分接口和类都是从这个接口继承而来的。
  1. RecursiveIterator (继承Iterator,为Traversable的孙子),递归迭代器,通过hasChildren()和getChildren()两个函数实现递归遍历子元素。
  1. Countable 这接口就一个count()函数,返回结果集的数量。实现这个接口的类可以用count()函数查询其结果集。
  1. Serializable 该接口实现序列化和反序列化的接口。在没有SPL之前,可以通过__sleep() 和__wakeup()实现相同的功能,若同时实现了Serializable 接口和_sleep() 和__wakeup(),则只有Serializable接口的函数启作用。
  1. OuterIterator 它的实现者可以包含一个或多个迭代器成员,即可以通过getInnerIterator()接口函数获取内部的迭代器,也可以直接通过类本身实现的Iterator接口遍历内部的迭代器数据。这在SPL是一个非常重要的接口,SPL中很多内置的迭代器实现了这个接口。
  1. SplObserver 观察者模式的中的观察者接口。
  1. SplSubject 观察者模式的中的发布者接口。

主要类

  1. DirectoryIterator 这个类用来查看一个目录中的所有文件和子目录。
  1. FilterIterator 这是一个抽象类,它实现了OuterIterator接口。它包装一个已有的迭代器类,通过抽象方法accept()过滤掉不需要的内容,形成一个新的迭代器。
  1. LimitIterator 这也是一个实现OuterIterator的类。它有点类似于SQL中的LIMIT语句。它通过包装一个已有迭代器,然后截取其中某一段数据形成一个新的迭代器。
  1. RecursiveDirectoryIterator 递归查看一个目录中的所有文件的子目录。
  1. SimpleXMLIterator 一个遍历XML内容的类
  1. IteratorIterator 实现对迭代器的包装,这也是SPL中对OuterIterator默认实现。
  1. InfiniteIterator 从字面意思就知道,这是个无限循环的迭代器,当next()到达最后时,会自动调用rewind()函数,又从头开始。
  1. AppendIterator 它实现了对一系统迭代器的包装,并且可以在运行过程中添加新的迭代器。
  1. SplFileInfo 获取文件信息类。SplFileObject 从该类继承。
  1. SplFileObject 文件操作类,可以按行的方式遍历文件内容。同时还能获取文件的大小及其它详细信息。

异常类

  1. Exception 异常基类
  1. LogicException 逻辑错误异常类。
  1. BadFunctionCallException 不合法的函数被调用产生的异常类。
  2. BadMethodCallException 不合法的方法被调用产生的异常类。
  3. DomainException 表示一个值不在有效范围内的异常。
  4. InvalidArgumentException 表示传递了无效的参数产生的异常。
  5. LengthException 表示一个参数超过了许可的长度的异常。
  6. OutOfRangeException 表示请求检索超越了数组等容器最大长度的异常。
  1. RuntimeException 运行时错误异常类。
  1. OutOfBoundsException 表示请求检索超越了数组等容器最大长度的异常。
  2. OverflowException 表示算法/缓存溢出异常。
  3. RangeException 运行期间的范围异常。
  4. UnderflowException 运行期间的算法/缓存的向下溢出异常。

一此其它函数

  1. iterator_apply 为迭代器中每个元素调用一个用户自定义函数
  1. iterator_count 计算迭代器中元素的个数
  1. iterator_to_array 将迭代器中的元素拷贝到数组
  1. spl_autoload_call 尝试调用所有已注册的__autoload()函数来装载请求类
  1. spl_autoload_extensions 注册并返回spl_autoload函数使用的默认文件扩展名。
  1. spl_autoload_functions 返回所有已注册的__autoload()函数。
  1. spl_autoload_register 注册__autoload()函数
  1. spl_autoload_unregister 注销已注册的__autoload()函数
  1. spl_autoload __autoload()函数的默认实现
  1. spl_classes 返回所有可用的SPL类

6.0中新增的数据结构

  1. SplDoublyLinkedList
  1. SplStack
  1. SplQueue
  1. SplHeap
  1. SplMaxHeap
  1. SplMinHeap
  1. SplPriorityQueue
  1. SplFixedArray 这是个固定大小的数组,性能比系统内置的array()要快些。
  1. SplObjectStorage

参考

外部链接