background image

深圳市一览网络股份有限
公司
ShenZhen Elanw Network 

Co.,Ltd.

地址:南山科技园南区数字技术园
B2 栋 4A 
Add: Room A,4th Floor,Block 
B2,Digi-Tech Park ,

电话(Tel):0755-86133725
传真(Fax):0755-22632616
网址
(Web):www.YL1001.com

 

什么是

SPL,如何使用,他有什么作用,下

面我我们就讲讲

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 的代码效率。那么,我

们如何发挥它的威力?
重载

 autoloader

如果你是位「教科书式的程序员」,那么你保证了解如何使用

 __autoload 去代替 includes/requires 操作惰性

载入对应的类,对不?
但久之,你会发现你已经陷入了困境,首先是你要保证你的类文件必须在指定的文件路径中,例如在

 

Zend 框架中你必须使用「_」来分割类、方法名称(你如何解决这一问题?)。
另外的一个问题,就是当项目变得越来越复杂,

 __autoload 内的逻辑也会变得相应的复杂。到最后,甚至

你会加入异常判断,以及将所有的载入类的逻辑如数写到其中。
大家都知道「鸡蛋不能放到一个篮子中」,利用

 SPL 可以分离 __autoload 的载入逻辑。只需要写个你自己的

 

autoload 函数,然后利用 SPL 提供的函数重载它。
例如上述

 Zend 框架的问题,你可以重载 Zend loader 对应的方法,如果它没有找到对应的类,那么就使用

你先前定义的函数。
 
 
复制代码

 代码如下:

<?php

class

 MyLoader {

    

public

 

static

 

function

 doAutoload(

$class

) {

        

// 本模块对应的 autoload 操作

    

}

}
 
spl_autoload_register( 

array

('MyLoader', 'doAutoload') );

?>
 
 
正如你所见,

 spl autoload register 还能以数组的形式加入多个载入逻辑。同时,你还可以利用 spl autoload 

unregister 移除已经不再需要的载入逻辑,这功能总会用到的。
迭代器
迭代是常见设计模式之一,普遍应用于一组数据中的统一的遍历操作。可以毫不夸张的说,

SPL 提供了所