gpt4 book ai didi

php - DirectoryIterator 和 FileSystemIterator 的区别

转载 作者:IT王子 更新时间:2023-10-28 23:57:23 25 4
gpt4 key购买 nike

引入 PHP 5 DirectoryIterator , 和 PHP 5.3 引入 FileSystemIterator .

FileSystemIterator 扩展了 DirectoryIterator,但文档没有说明它带来了哪些额外的功能。

你能说出 DirectoryIteratorFileSystemIterator 的区别吗?

最佳答案

这出乎我的意料,我有点陷入了 PHP 5.3 之前的变化中到(可怕的)PECL 扩展。

自 5.3 以来发生的主要变化是 SPL 成为无法再禁用的扩展,请参阅 changelog 5.3 注意到

  • 将 SPL 添加到无法禁用的标准扩展列表中。(马库斯)

所以像 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";
}

这是一个很好的问题,为什么他们没有更新文档以提醒用户实际上 FilesystemIteratorDirectoryIterator 之前。

关于php - DirectoryIterator 和 FileSystemIterator 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com