- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
引入 PHP 5 DirectoryIterator , 和 PHP 5.3 引入 FileSystemIterator .
FileSystemIterator
扩展了 DirectoryIterator
,但文档没有说明它带来了哪些额外的功能。
你能说出 DirectoryIterator
和 FileSystemIterator
的区别吗?
最佳答案
这出乎我的意料,我有点陷入了 PHP 5.3 之前的变化中到(可怕的)PECL 扩展。
自 5.3 以来发生的主要变化是 SPL 成为无法再禁用的扩展,请参阅 changelog 5.3 注意到
所以像 DirectoryIterator 或 SPLDoublyLinkedList 这样的花哨的类现在都是 PHP 5.3 附带的修复套件。
有很多讨论表明 DirectoryIterator 在迭代文件/目录以及从不够匿名的行为到正在使用的文件系统方面仍然非常笨拙。因为取决于文件系统(Windows NTFS/*nix EXTx),迭代器返回的结果与另一个不同,其中 *nix
环境默认总是产生点和双点目录(.
和 ..
) 作为有效目录。然后可以使用 isDot()
方法在循环中过滤这些点目录。
$it = new DirectoryIterator(__DIR__);
foreach ($it as $fileinfo) {
if (!$fileinfo->isDot())
var_dump($fileinfo->getFilename());
}
所以 FilesystemIterator
成为 PHP 5.3 中的新父类,在其发布之前是 DirectoryIterator
(其中 FilesystemIterator
扩展了 DirectoryIterator
来实现这个默认可互换的行为)。 FilesystemIterator
产生的行为或结果将等同于所有不同的文件系统并且可以互换,而无需循环中的任何开销
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
这是一个很好的问题,为什么他们没有更新文档以提醒用户实际上 FilesystemIterator
在 DirectoryIterator
之前。
关于php - DirectoryIterator 和 FileSystemIterator 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532064/
使用以下代码段递归映射当前目录的内容: $files = new RecursiveIteratorIterator ( new RecursiveDirectoryIterator('./'
使用以下代码段递归映射当前目录的内容: $files = new RecursiveIteratorIterator ( new RecursiveDirectoryIterator('./'
引入 PHP 5 DirectoryIterator , 和 PHP 5.3 引入 FileSystemIterator . FileSystemIterator 扩展了 DirectoryItera
引入 PHP 5 DirectoryIterator , 和 PHP 5.3 引入 FileSystemIterator . FileSystemIterator 扩展了 DirectoryItera
用 PHP 遍历目录中的文件 $it = new FilesystemIterator('/path/of/files/to/iterate/over'); foreach ($it as $file
我是一名优秀的程序员,十分优秀!