PHP 5引入了DirectoryIterator,而PHP 5.3引入了FileSystemIterator.
FileSystemIterator
扩展DirectoryIterator
,但文档没有说明它带来了什么额外的功能.
你能告诉之间的区别DirectoryIterator
和FileSystemIterator
?
dbf*_*dbf 56
这个问题超出了我的脑海,我在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());
}
Run Code Online (Sandbox Code Playgroud)
因此FilesystemIterator
成为PHP 5.3中的新父类,它在发布之前是DirectoryIterator
(默认情况下FilesystemIterator
扩展DirectoryIterator
为实现此可互换行为).然后,所FilesystemIterator
产生的行为或结果将等于所有不同的文件系统并且可互换,而不需要循环中的任何开销
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的问题,为什么他们没有更新文档以便注意到用户实际上在FilesystemIterator
之前的事实DirectoryIterator
.
Bab*_*aba 15
DirectoryIterator
是...的延伸 SplFileInfo
而
FilesystemIterator
是...的延伸 DirectoryIterator
和两个工具
Iterator , Traversable , SeekableIterator
FilesystemIterator
有一些标志,当工作哪些文件非常有用时会影响它的行为FOLLOW_SYMLINKS , SKIP_DOTS etc
,这就是它的大部分区别.
您可以在FilesystemIterator预定义常量中看到完整标志
例
$iterator = new DirectoryIterator(dirname(__FILE__));
foreach ( $iterator as $fileinfo ) {
var_dump($fileinfo->current()); // would return object(DirectoryIterator)
}
Run Code Online (Sandbox Code Playgroud)
例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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21428 次 |
最近记录: |