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

 

有你需要的对应数据类型的迭代器。
有个非常好的案例就是遍历目录。常规的做法就是使用

 scandir ,然后跳过「.「 和 「..」,以及其它未满足条

件的文件。例如你需要遍历个某个目录抽取其中的图片文件,就需要判断是否是

 jpg、gif 结尾。

下面的代码就是使用

 SPL 的迭代器执行上述递归寻找指定目录中的图片文件的例子:

复制代码

 代码如下:

<?php

class

 RecursiveFileFilterIterator 

extends

 FilterIterator {

    

// 满足条件的扩展名

    

protected

 

$ext

 = 

array

('jpg','gif');

    

/**

     

* 提供 $path 并生成对应的目录迭代器

     

*/

    

public

 

function

 __construct(

$path

) {

        

parent::__construct(

new

 RecursiveIteratorIterator(

new

 RecursiveDirectoryIterator(

$path

)));

    

}

    

/**

     

* 检查文件扩展名是否满足条件

     

*/

    

public

 

function

 accept() {

        

$item

 = 

$this

->getInnerIterator();

        

if

 (

$item

->isFile() && 

                

in_array(

pathinfo

(

$item

->getFilename(), PATHINFO_EXTENSION), 

$this

->ext)) {

            

return

 TRUE;

        

}

    

}

}

// 实例化
foreach

 (

new

 RecursiveFileFilterIterator('/path/to/something') 

as

 

$item

) {

    echo

 

$item

 . PHP_EOL;

}
?>
 
你可能会说,这不是花了更多的代码去办同一件事情吗?那么,查看上面的代码,你不是拥有了具有高
度重用而且可以测试的代码了吗

 :)