php – 这个方法来自哪里

我目前正在通过
PHP如何预订,并有点困惑以下.部分代码是;

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

我(我想)我明白$filesInFolder = new DirectoryIterator($folder)在$filesInFolder中创建一个新的DirectoryIterator($folder)实例,而$file = $filesInFolder-> current()正在调用方法current()在$file.

我不明白的是$file-> getFilename()中的方法getFilename()来自哪里.

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

谢谢

最佳答案 你的问题非常有效.这确实令人困惑.更重要的是,获取 – > current()的步骤可以省略.这也有效:

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

DirectoryIterator类公开了方法current

Return the current DirectoryIterator item.

这实际上是Iterator interfacecurrent method的实现.

令人困惑的是,DirectoryIterator :: current返回的对象又是DirectoryIterator类.这个类合并为一个你期望在不同的类中隔离的类:

> SeekableIterator方法(例如next,rewind,seek),它们用于收集文件,以及
>当前项目方法(例如getFilename,getSize),它们适用于当前文件.

因此,当这些在一个对象中汇集在一起​​时,您不需要调用current,尽管有些人仍然希望与其他Iterable类的工作方式保持一致.

注意:通常你会以这种方式在Iterable上编写代码:

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

这样你也可以处理根本没有匹配文件的情况.

点赞