PHP Conference Japan 2024

RecursiveDirectoryIterator::__construct

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

RecursiveDirectoryIterator::__construct构造一个 RecursiveDirectoryIterator

描述

public RecursiveDirectoryIterator::__construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

为提供的 directory 构造一个 RecursiveDirectoryIterator()

参数

directory

要迭代的目录的路径。

flags

可以提供标志,这些标志将影响某些方法的行为。标志列表可以在 FilesystemIterator 预定义常量 中找到。也可以使用 FilesystemIterator::setFlags() 在以后设置它们。

错误/异常

如果 directory 不存在,则抛出 UnexpectedValueException

如果 directory 是空字符串,则抛出 ValueError

变更日志

版本 描述
8.0.0 现在如果 directory 是空字符串,则抛出 ValueError;之前它抛出 RuntimeException

示例

示例 #1 RecursiveDirectoryIterator 示例

<?php

$directory
= '/tmp';

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));

$it->rewind();
while(
$it->valid()) {

if (!
$it->isDot()) {
echo
'SubPathName: ' . $it->getSubPathName() . "\n";
echo
'SubPath: ' . $it->getSubPath() . "\n";
echo
'Key: ' . $it->key() . "\n\n";
}

$it->next();
}

?>

上面的示例将输出类似于以下内容

SubPathName: fruit/apple.xml
SubPath:     fruit
Key:         /tmp/fruit/apple.xml

SubPathName: stuff.xml
SubPath:     
Key:         /tmp/stuff.xml

SubPathName: veggies/carrot.xml
SubPath:     veggies
Key:         /tmp/veggies/carrot.xml

参见

添加注释

用户贡献的注释 2 条注释

pedro dot matamouros at gmail dot com
14 年前
您可以将 RecursiveDirectoryIterator::FOLLOW_SYMLINKS 作为构造函数的标志,以便 RecursiveDirectoryIterator 跟踪符号链接,默认情况下它不会这样做。

[由 php DOT net 上的 danbrown 在 2012 年 7 月 16 日编辑:包含由 (lightrekky AT gmail DOT com) 在 2012 年 7 月 2 日的注释 #109280 中提供的类型修复。]
hanskrentel at yahoo dot de
12 年前
这两个默认标志与我的 PHP 版本(5.3 和 5.4)一样为零(虚拟)。这意味着您无法使用 & 按位运算符检查它们是否已设置。

<?php
// CURRENT_AS_FILEINFO (0)
// KEY_AS_PATHNAME (0)

### 始终为 FALSE ###
$directoryIterator->getFlags() & RecursiveDirectoryIterator::CURRENT_AS_FILEINFO;

?>

但这同时也允许您无需重复默认标志即可直接使用其他标志。

<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::UNIX_PATHS
);
?>

无需重复默认标志。请注意,这与 FilesystemIterator 不同,FilesystemIterator 的默认标志还有 SKIP_DOTS 标志,它是非零的。

<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::SKIP_DOTS
| FilesystemIterator::UNIX_PATHS
);
?>
To Top