使用PHPSPL和他的力量
SPL,PHP的标准库(标准PHP库),它从PHP 5内置的组件和接口,并逐渐走向成熟,从php5.3.spl实际上是建立在所有PHP5开发环境没有任何设置。看来,大量的PHP开发者没有使用它,甚至闻所未闻。原因可以追溯到其炫耀学问如文档,让你忽略了它的存在。SPL的宝石般的泰坦尼克号海洋之心,现在应该由我们捡起来,放在自己的位置,这是本文所要表达的观点,这一点。
那么,SPL提供了什么呢
SPL扩展PHP引擎,如接口如ArrayAccess,可数,和seekableiterator,这是用来操作数组中的对象。同时,你也可以用其他如recursiveiterator迭代器,arrayobejcts,和其他迭代器做数据的迭代操作。
它也包含多个对象,如例外,splobserver,spltorage和splautoloadregister,splclasses,iteratorapply等帮助功能(辅助功能),这是用于重载相应的功能。
这些工具组合成一个多功能的瑞士军刀,并用它们来提高PHP的代码效率,因此,我们如何发挥它的力量呢
重负荷自动装弹机
如果你是一个教科书的程序员,你会知道如何使用__autoload代替包括 /需要运行加载相应的类,对吗
但是时间一长,你会发现,你有麻烦了,首先你要确保你的类文件必须在指定路径的文件,例如在Zend Framework,您必须使用_分割,方法名称(你怎么解决这个问题)。
另一个问题是,随着项目变得越来越复杂,在__autoload逻辑变得更加复杂。在一天结束的时候,你甚至会添加例外写的所有类的逻辑去。
大家都知道,鸡蛋不能放在一个篮子里只是自己写的自动加载功能,然后再与由SPL功能。
例如,上述Zend框架的问题,你可以重载Zend装载机对应的方法。如果找不到相应的类,则使用前面定义的函数。
复制代码代码如下所示:
< PHP
类myloader {
公共静态函数doautoload(合班){
/ /对应的加载操作模块
}
}
spl_autoload_register(阵列('myloader ','doautoload '));
>
你可以看到,SPL加载登记也可以添加阵列形式的多输入逻辑。同时,你也可以使用SPL自动注销删除不再需要的加载逻辑,它总是用。
迭代器
迭代是一种常见的设计模式,它广泛应用于一组数据中的一组统一遍历操作,毫不夸张地说,SPL提供了您所需的所有相应数据类型的迭代器。
一个很好的案例是遍历目录。传统的方法是使用scandir,然后跳过,和,等不满意的文件。例如,如果你需要遍历一个目录中的图片文件,你需要判断它是否是JPG和GIF结束。
下面的代码是使用SPL的迭代器在指定目录中搜索图片文件时执行上述递归的一个示例。
复制代码代码如下所示:
< PHP
类recursivefilefilteriterator延伸filteriterator {
为了满足扩展的条件。
保护$分机=阵列('jpg ','gif);
*提供路径并生成相应的目录迭代器。
* /
公共功能__construct($路径){
家长::__construct(新recursiveiteratoriterator(新recursivedirectoryiterator($路径)));
}
*检查文件扩展名是否满足。
* /
公共函数接受(){
项目=美元美元-> getinneriterator();
如果($项->文件()
in_array(是($项->作用:取文件名()(),pathinfo_extension),美元-> EXT))
返回true;
}
}
}
实例化
foreach(新recursivefilefilteriterator( / / /路径点)至项目){
回波$项。php_eol;
}
>
你可能会说,不需要更多的代码来做同样的事情吗所以,看看上面的代码,你有没有重用和测试的代码: