这种方法来自哪里

时间:2016-03-15 13:50:37

标签: php

我目前正在通过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中创建了该类的新实例,还是其他事情发生了?

由于

2 个答案:

答案 0 :(得分:1)

您的问题非常有效。这确实令人困惑。更重要的是,获取->current()的步骤可以省略。这也可行:

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

DirectoryIterator类公开了一种方法current

  

返回当前的DirectoryIterator项目。

这实际上是current methodIterator interface的实现。

令人困惑的是,DirectoryIterator::current返回的对象再次属于DirectoryIterator类。此类 组合成一个您希望在不同类中分隔的内容:

  • next方法(例如rewindseekgetFilename),这些方法适用于文件的集合,并且
  • 当前项目方法(例如getSizecurrent),它们适用于当前文件。

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

注意:通常你会以foreach (new DirectoryIterator( $folder) as $file) { $filename = $file->getFilename(); // ... etc, maybe break; } 的方式编写代码:

UserId, Name, ManagerId

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

答案 1 :(得分:0)

  1. 创建DirectoryIterator的实例

    $filesInFolder = new DirectoryIterator($folder);
    
  2. 返回分配给$filesInFolder的DirectoryIterator对象(不是新实例)

    $file = $filesInFolder->current();
    
  3. 返回分配给$file的DirectoryIterator对象的文件名。

    $filename = $file->getFilename();