开发者社区> 问答> 正文

PHP SPL核心库相对以前有什么好处?

我想问下,PHP5 提供的SPL有什么好处,以前写个array就可以解决,为什么现在非要包装一个类呢?
比如遍历目录这段代码,请问SPL比传统代码好在哪呢?
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('D:/history') as $item) {
    echo $item . PHP_EOL;
}

传统方法:

<?php
//http://blog.ddian.cn/?post=839
    function dirSize($directoty){
        $dir_size=0;

        if($dir_handle=@opendir($directoty))
        {
            while($filename=readdir($dir_handle)){
                $subFile=$directoty.DIRECTORY_SEPARATOR.$filename;
                if($filename=='.'||$filename=='..'){
                    continue;
                }elseif (is_dir($subFile))
                {
                    $dir_size+=dirSize($subFile);
                }elseif (is_file($subFile)){
                    $dir_size+=filesize($subFile);
                }
            }
            closedir($dir_handle);
        }
        return ($dir_size);
    }

    $dir_size=dirSize("xym");
    echo round($dir_size/pow(1024,1),2)."KB";
?>

展开
收起
落地花开啦 2016-06-13 14:08:59 2437 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    抽象,外部代码可以根据 FilterIterator 来操作,不需要管是否是操作文件系统,比如你以后可能会将文件系统转换为数据库。

    项目可能出现的演变情况:

    RecursiveFileFilterIterator => RecursiveDatabaseFilterIterator => RecursiveMemoryFilterIterator

    2019-07-17 19:35:49
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载