这种方法从何而来

马特

我目前正在通过php进行预订,以下内容使我有些困惑。该代码的一部分是;

$filesInFolder = new DirectoryIterator( $folder);
$file = $filesInFolder->current();
$filename = $file->getFilename();

我(想我)了解到,$filesInFolder = new DirectoryIterator( $folder)创建的新实例DirectoryIterator( $folder)$filesInFolder,并且$file = $filesInFolder->current()在调用方法current()$file

我不明白的是这里是方法getFilename()$file->getFilename()来源。

是在$file = $filesInFolder->current()创建类的新实例$file还是发生其他事情?

谢谢

亭子

您的问题很有效。确实令人困惑。而且,获取的步骤->current()可以省略。这也将起作用:

$filesInFolder = new DirectoryIterator( $folder);
$filename = $filesInFolder->getFilename();

所述DirectoryIterator类公开的方法的电流

返回当前DirectoryIterator项目。

这实际上是接口current方法Iterator实现

这里令人困惑的是,by返回的对象DirectoryIterator::current还是DirectoryIterator该类的对象此类您期望在单独的类中分离的部分合并为一个:

  • SeekableIterator方法(如nextrewindseek),在其工作收集的文件,和
  • 所述当前项的方法(如getFilenamegetSize),它的工作电流文件。

因此,当这些元素在一个对象中组合在一起时,您无需调用current,尽管有些人仍然希望这样做,以便与其他Iterable类一起使用。

注意:通常,您将以Iterable这种方式编写代码

foreach (new DirectoryIterator( $folder) as $file) {
    $filename = $file->getFilename();
    // ... etc, maybe break;
}

这样,您还可以处理根本没有匹配文件的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章