PHP的迭代器类

Cod*_*opr 6 php spl iterator

我正在使用PHP的SPL递归迭代器,虽然我对它很困惑,但我正在学习.

我在一个项目中使用它们,我需要以递归方式获取所有文件并从结果中排除文件夹.我最初使用这种方法......

$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory,
                RecursiveIteratorIterator::CHILD_FIRST);

foreach ($iterator as $fileinfo) {    
    if ($fileinfo->isDir()) {
        //skip directories
        //continue;
    }else{
        // process files
    }
}
Run Code Online (Sandbox Code Playgroud)

但是后来一个SO用户建议我使用这个方法,这样我就不需要isDir()在循环中使用这个方法......

$directory = new RecursiveDirectoryIterator($path,
                        RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
                        RecursiveIteratorIterator::LEAVES_ONLY);
Run Code Online (Sandbox Code Playgroud)

请注意我RecursiveDirectoryIterator::SKIP_DOTSRecursiveDirectoryIterator构造函数中使用的应该跳过文件夹或...

现在我很困惑,因为经过一些测试,即使没有使用RecursiveDirectoryIterator::SKIP_DOTS它似乎没有显示它们,我使用Windows可能是这个原因,点数只出现在Unix类型系统上?或者我很困惑,我错过了什么?

也可以通过使用RecursiveIteratorIterator::LEAVES_ONLY代替RecursiveIteratorIterator::CHILD_FIRST它来阻止文件夹显示在我的结果中,这是我想要的但我不明白为什么?文档中没有相关信息

dec*_*eze 3

叶子是中没有任何其他项目悬挂在其上的项目,即它是树枝的末端。根据定义,文件符合此描述。

-- folder
   |
   |- folder
   |  |
   |  |- file       <- a leaf
   |  |
   |  -- folder
   |     |
   |     -- file    <- another leaf
   |
   -- file          <- yet another leaf
Run Code Online (Sandbox Code Playgroud)

通过将其设置RecursiveIteratorIterator为“仅叶子”模式,它将跳过任何不是叶子的项目。