SPL,PHP 标准库(Standard PHP Library),paperen之前在《PHP高级程序设计:模式、框架与测试》一书中就见过这个词,但是那时貌似没有认真对待它,而今天paperen再重新查阅了spl相关的资料,证实了一样东西“值得一试并值得加以融入到以前的编码模式中”。放在前面,本文并不是要详说spl中的具体东西,而是纯属个人吹水……

可能您也没怎么了解有关spl的东西,但是建议您不妨查阅一下资料,在google输入php spl您会得到一些很吸引人的标题,比如“PHP SPL,遗落的宝石”,确实值得您浏览一番滴~~

”spl从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟“,但目前spl貌似没怎被开发使用。当然啦,在使用spl之前还是得需要一定的代码基础,因为大部分都是与类或者接口打交道的,如果您连什么叫类都不是太清楚的话,相信阅读手册会可能会有点困难,您至少需要有些少oop(Object Oriented Programming)面向对象的基础。

或者您可以先阅读一下这个http://www.tech-q.cn/redirect.php?tid=11044&goto=lastpost

里面也有一个好的例子说明了使用spl中的迭代器是如何方便简单,但是看完了之后确实会有“你可能会说,这不是花了更多的代码去办同一件事情吗?”,“不足矣‘诱惑你’去使用 SPL”这么一些想法……paperen也是。但是要明白这种编码是符合oop思想的,那个帖子中也说到“具有高度重用”,确实您可以写一两个函数去实现同样的功能,但是两者的编码思想是不同的,一个是oop另一个可能是oo(面向过程)。

而paperen在网上看到一篇很有趣的文章来说明了两种思想的某些区别。http://www.talentdigger.cn/home/space.php?uid=91&do=blog&id=889

要明白当您的水平到达一个程度的时候您会开始想偷懒,您会开始觉得以前单个文件实现一种功能这种编码行为太可怕了,您会开始佩服自己以前的编码思路,甚至不想再看以前写的代码(比较极端)……您会开始想一些很奇怪的东西,例如我能不能让这个文件处理更多功能,能不能让某些代码不用每次都ctrl+v一遍,能不能简化一下代码,能不能在修改的时候少改点代码(那些又长又臭的代码)等等。或者您可以看看paperen之前写的一篇东西 http://paperen.com/archive/我是怎样编写网站代码的,希望会对您产生一些共鸣。以下为paperen改进了一下那个例子的代码(读取某个路径下指定类型的文件)

<?php 

define('ROOT', str_replace('\', '/', dirname(dirname(__FILE__))));
define('ALLOWEXT', 'jpg|gif|png|php');

class my_filefilter extends FilterIterator
{
protected $_ext = array();
public function __construct($path) {
parent::__construct(new RecursiveDirectoryIterator($path));
}
public function set_ext($ext) {
$this->_ext = $ext;
}
public function get_ext() {
return $this->_ext;
}
public function accept() {
$item = $this->getInnerIterator();
if ($item->isFile() && in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->_ext)) return true;
}
}

$my_files = new my_filefilter(ROOT);
$my_files->set_ext(explode('|', ALLOWEXT));

foreach ($my_files as $item) {
print_r($item);
echo PHP_EOL . $item->getFilename() . PHP_EOL;
}

?>

ROOT这个常量就要根据您测试时修改吧,在实际使用过程中会固定的,这里为可允许后缀作了封装,而不是像上面url中那个例子那样直接固定在类中,我们可以根据自己的需求更改我们需要的文件类型,调用set_ext就可以了。

paperen相信当你了解到一定程度你会发现spl的价值真的很大。

(ps:php手册里面的介绍也是比较详细的了,再分享一个带评论版的php手册的下载地址,http://www.installb.tk/post-23.html,好东西来的)