我目前正在通过
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
interface的current
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;
}
这样你也可以处理根本没有匹配文件的情况.