如何有效地使用目录迭代器


How to efficiently use DirectoryIterator?

我需要从包含大量文件的目录中过滤掉一些文件。在我的脚本中,此函数被多次调用。

function getFilteredFiles($criteria) {
    static $files = '';           
    if ($files == '') {
        $files = new DirectoryIterator($path);
    }
    else {
        $files->rewind();
    }
    foreach($files as $file) {
         if (! $file->isDot()) {
             if (!$file->isDir()) {
                  //using $criteria
                  ...
              }
         }
    }
    ...
 }

将目录迭代器放在静态变量中是让 php 只进入文件系统一次以获取文件的方法吗?(= php 是否只在目录迭代器的__construct期间进入文件系统?

我查看了源代码,当您倒带迭代器时,看起来他们试图从中读取目录条目的流。我不敢深入研究 php streams.c 文件以进一步查看,但根据我看到的流搜索,我猜它不会再次击中文件系统。

我想您可以使用 strace 快速测试。

将目录迭代器放在静态变量中是要去的方式吗 让 PHP 只去文件系统一次来获取文件?(= php 仅在__construct期间转到文件系统 目录迭代器?

是的。

但是,为什么要在控制器中创建数据模型的新实例而不是对其进行子类化?