DirectoryIterator和FileSystemIterator之间的区别
PHP 5引入了DirectoryIterator ,而PHP 5.3引入了FileSystemIterator 。
 FileSystemIterator扩展DirectoryIterator ,但文档没有说明它带来了什么额外的function。 
 你能告诉DirectoryIterator和FileSystemIterator的区别吗? 
这是我头顶的问题,在PHP 5.3之前我曾经遇到过5.3版本以后会发生变化的问题,这些问题涉及到SPL(StandardPHPLibrary)以及将被移到(可怕的)PECL扩展。
5.3以来的主要变化是SPL成为了一个不能被禁用的扩展,见5.3的更新日志 ,注意到
- 将SPL添加到无法禁用的标准扩展名列表中。 (马库斯)
所以所有像DirectoryIterator或SPLDoublyLinkedList这样的花式类现在都是PHP 5.3附带的一组修复类。
 有很多的讨论,DirectoryIterator在迭代文件/目录和行为不够匿名的情况下仍然非常笨拙。 由于依赖于文件系统(Windows NTFS / * nix EXTx),迭代器将返回的结果与另一个不同,其中每个默认情况下的*nix环境总是将dot和double dot目录( .和.. )作为有效目录。 然后可以通过使用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之前。 
  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) } 
例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 }