PHP SPL,被遗落的宝石
SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。
似乎众多的 PHP 开发人员基本没有使用它,甚至闻所未闻。究其原因,可以追述到它那阳春白雪般的说明文档,使你忽略了「它的存在」。SPL 这块宝石犹如铁达尼的「海洋之心」般,被沉入海底。而现在它应该被我们捞起,并将它穿戴在应有的位置 ,而这也是这篇文章所要表述的观点。
那么,SPL 提供了什么?
SPL 对 PHP 引擎进行了扩展,例如 ArrayAccess、Countable 和 SeekableIterator 等接口,它们用于以数组形式操作对象。同时,你还可以使用 RecursiveIterator、ArrayObejcts 等其他迭代器进行数据的迭代操作。
它还内置几个的对象例如 Exceptions、SplObserver、Spltorage 以及 splautoloadregister、splclasses、iteratorapply 等的帮助函数(helper functions),用于重载对应的功能。
这些工具聚合在一起就好比是把多功能的瑞士军刀,善用它们可以从质上提升 PHP 的代码效率。那么,我们如何发挥它的威力?
自动加载(autoload)
当需要惰性加载需要的类时,你可能知道__autoload方法,该方法将在操作未定义的类时调用,允许你传入自定义引入类的处理方法
例如:
function __autoload($classname) {
var_dump($classname);
require_once ($classname .'php');
}
$test = new Test();
当new Test时,它会经过__autoload函数,尝试引入Test.php
但是,__autoload的弊端也是显而易见的,该函数只能定义一次,所有需要引入的函数都得在这一个函数里面,当一个项目有需要额外引入时,都得操作这个函数,这个函数将会变得越来越复杂.
所以,我们可以用上spl_autoload_register
class MyLoader {
public static function doAutoload($class) {
// 本模块对应的 autoload 操作
}
}
spl_autoload_register( array('MyLoader', 'doAutoload') );
你可以在任何模块,定义新的处理方法,可以传入数组进行类方法操作
迭代器
迭代是常见设计模式之一,普遍应用于一组数据中的统一的遍历操作。可以毫不夸张的说,SPL 提供了所有你需要的对应数据类型的迭代器。
请看下题:
该面试题,可以使用spl的ArrayIterator进行迭代
- 本文标签: 编程语言
- 本文链接: https://www.php20.cn/article/127
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权