DirectoryIterator 和 FileSystemIterator 之间的区别
PHP 5 引入了 DirectoryIterator,PHP 5.3 引入了 FileSystemIterator。
FileSystemIterator
扩展,但文档没有说明它带来了哪些额外的功能。DirectoryIterator
你能分辨出 和 之间的区别吗?DirectoryIterator
FileSystemIterator
PHP 5 引入了 DirectoryIterator,PHP 5.3 引入了 FileSystemIterator。
FileSystemIterator
扩展,但文档没有说明它带来了哪些额外的功能。DirectoryIterator
你能分辨出 和 之间的区别吗?DirectoryIterator
FileSystemIterator
这超出了我的头顶,我有点陷入了PHP 5.3之前的更改中,这些变化将在5.3及以后的版本中更改,涉及SPL(StandardPHPLibrary)以及将要移动到(可怕的)PECL扩展的内容。
自5.3以来发生的主要变化是SPL成为无法再禁用的扩展,请参阅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());
}
因此,成为 PHP 5.3 中的新父类,在发布之前是 (默认情况下,扩展以实现此可互换行为)。然后,行为或生成的结果将等于所有不同的文件系统并且可以互换,而无需在循环中产生任何开销。FilesystemIterator
DirectoryIterator
FilesystemIterator
DirectoryIterator
FilesystemIterator
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
这是一个很好的问题,为什么他们没有更新文档,以注意到用户实际上在.FilesystemIterator
DirectoryIterator
DirectoryIterator
是 的扩展SplFileInfo
而
FilesystemIterator
是 的扩展DirectoryIterator
和两个实现
Iterator , Traversable , SeekableIterator
FilesystemIterator
具有影响其行为的标志,这些标志在处理哪些文件时非常有用,例如,这使得它的大部分区别。FOLLOW_SYMLINKS , SKIP_DOTS etc
您可以在文件系统编辑器预定义常量中看到完整的标志
例
$iterator = new DirectoryIterator(dirname(__FILE__));
foreach ( $iterator as $fileinfo ) {
var_dump($fileinfo->current()); // would return object(DirectoryIterator)
}
示例 2
$iterator = new FilesystemIterator(__DIR__, FilesystemIterator::CURRENT_AS_PATHNAME);
foreach ( $iterator as $fileinfo ) {
var_dump($iterator->current()) . "\n"; // Would return full path eg /www/examples/example.php
}