我需要从包含大量文件的目录中过滤掉一些文件。在我的脚本中,此函数被多次调用。
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期间转到文件系统 目录迭代器?
是的。
但是,为什么要在控制器中创建数据模型的新实例而不是对其进行子类化?