我目前正在通过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
中创建了该类的新实例,还是其他事情发生了?
由于
答案 0 :(得分:1)
您的问题非常有效。这确实令人困惑。更重要的是,获取->current()
的步骤可以省略。这也可行:
$filesInFolder = new DirectoryIterator( $folder);
$filename = $filesInFolder->getFilename();
DirectoryIterator类公开了一种方法current:
返回当前的
DirectoryIterator
项目。
这实际上是current
method的Iterator
interface的实现。
令人困惑的是,DirectoryIterator::current
返回的对象再次属于DirectoryIterator
类。此类 将 组合成一个您希望在不同类中分隔的内容:
next
方法(例如rewind
,seek
,getFilename
),这些方法适用于文件的集合,并且getSize
,current
),它们适用于当前文件。因此,当这些在一个对象中聚集在一起时,您不需要调用Iterable
,尽管有些人仍然希望与其他Iterable
类的工作方式保持一致。
注意:通常你会以foreach (new DirectoryIterator( $folder) as $file) {
$filename = $file->getFilename();
// ... etc, maybe break;
}
的方式编写代码:
UserId, Name, ManagerId
这样你也可以处理根本没有匹配文件的情况。
答案 1 :(得分:0)
创建DirectoryIterator的实例
$filesInFolder = new DirectoryIterator($folder);
返回分配给$filesInFolder
的DirectoryIterator对象(不是新实例)
$file = $filesInFolder->current();
返回分配给$file
的DirectoryIterator对象的文件名。
$filename = $file->getFilename();