开发者社区> 问答> 正文

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

落地花开啦 2016-06-13 14:08:59 1030

我想问下,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";
?>
PHP
分享到
取消 提交回答
全部回答(1)
  • 落地花开啦
    2019-07-17 19:35:49

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

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

    RecursiveFileFilterIterator => RecursiveDatabaseFilterIterator => RecursiveMemoryFilterIterator

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程