加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 这个方法来自哪里

发布时间:2020-12-13 16:04:04 所属栏目:PHP教程 来源:网络整理
导读:我目前正在通过 PHP如何预订,并有点困惑以下.部分代码是; $filesInFolder = new DirectoryIterator( $folder);$file = $filesInFolder-current();$filename = $file-getFilename(); 我(我想)我明白$filesInFolder = new DirectoryIterator($folder)在$filesI
我目前正在通过 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;
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读