Php 为什么isDot()对我不起作用?(菲律宾)

Php 为什么isDot()对我不起作用?(菲律宾),php,iterator,Php,Iterator,我正在完成列出目录中文件的代码段。我在列出目录中的文件时没有问题,但出于某种原因,我可以使用isDot()方法来确保文件不是“.”或“.”。以下情况导致此错误: Fatal error: Call to undefined method SplFileInfo::isDot() in .... 在切换到使用递归迭代器之前,我使用的是目录迭代器,它工作得很好。下面的代码有什么问题吗?它应该会起作用 $files = new RecursiveIteratorIterator(new Recurs

我正在完成列出目录中文件的代码段。我在列出目录中的文件时没有问题,但出于某种原因,我可以使用isDot()方法来确保文件不是“.”或“.”。以下情况导致此错误:

Fatal error: Call to undefined method SplFileInfo::isDot() in ....
在切换到使用递归迭代器之前,我使用的是目录迭代器,它工作得很好。下面的代码有什么问题吗?它应该会起作用

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathToFolder));

//if there is a subdirectory it makes sure the proper extension is passed
foreach($files as $name => $file){      

            if (!$file->isDot()) {    //this is where it shuts me down          

            $realfile = str_replace($pathToFolder, "", $file);
            $url = getDownloadLink($folderID, $realfile);
        $fileArray[] = $url;            

        }       
}
这是因为(在
foreach
-循环中调用的方法)返回一个对象,该对象本身的类型为
DirectoryIterator
FileSystemIterator
(即
recursivedirectoryinterator
extends)返回默认值为
SplFileInfo的对象。你可以通过


但在您的情况下,如果项目是点文件,则不需要进行测试。只需设置
filesystemator::SKIP_DOTS
,它们就不会出现。请注意,这也是问题所在

另一个答案很好,但对于不同的方法,您可以设置
跳过点
标志:

<?php

$o_dir = new RecursiveDirectoryIterator($pathToFolder);
$o_dir->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$o_iter = new RecursiveIteratorIterator($o_dir);

foreach ($o_iter as $o_info) {
   echo $o_info->getPathname(), "\n";
}

很好的解释!感谢您向我解释。我不知道它是否已更改,但递归DirectoryIterator不再默认使用
FileSystemEmitter::SKIP_DOTS
<?php

$o_dir = new RecursiveDirectoryIterator($pathToFolder);
$o_dir->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$o_iter = new RecursiveIteratorIterator($o_dir);

foreach ($o_iter as $o_info) {
   echo $o_info->getPathname(), "\n";
}