原创

PHP SPL,被遗落的宝石

温馨提示:
本文最后更新于 2018年04月23日,已超过 2,218 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

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进行迭代

正文到此结束
本文目录