略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: GlobIterator::__construct

2024-12-20

GlobIterator::__construct

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

GlobIterator::__constructConstruct a directory using glob

说明

public GlobIterator::__construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

Constructs a new directory iterator from a glob expression.

参数

pattern

A glob() pattern.

flags

Option flags, the flags may be a bitmask of the FilesystemIterator constants.

错误/异常

Throws an UnexpectedValueException if the directory does not exist.

Throws a ValueError if the directory is an empty string.

更新日志

版本 说明
8.0.0 Now throws a ValueError if directory is an empty string; previously it threw a RuntimeException.

范例

示例 #1 GlobIterator example

<?php
$iterator 
= new GlobIterator('*.dll'FilesystemIterator::KEY_AS_FILENAME);

if (!
$iterator->count()) {
    echo 
'No matches';
} else {
    
$n 0;

    
printf("Matched %d item(s)\r\n"$iterator->count());

    foreach (
$iterator as $item) {
        
printf("[%d] %s\r\n", ++$n$iterator->key());
    }
}
?>

以上例程的输出类似于:

Matched 2 item(s)
[1] php5ts.dll
[2] php_gd2.dll

参见

add a noteadd a note

User Contributed Notes 2 notes

up
1
ozana at omdesign dot cz
8 years ago
GlobIterator doesn’t have a way to support GLOB_BRACE!

<?php
$iterator
= new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
up
0
info at ensostudio dot ru
1 year ago
Fix problem with braces in template:
<?php
class GlobStreamWrapper
{
    private
$generator;

    protected function
createGenerator(array $paths): Generator
   
{
        return yield from
$paths;
    }

    public function
dir_opendir(string $pattern, int $options = 0): bool
   
{
       
$pattern = substr($pattern, 7); // crop 'glob://' prefix
       
$pattern = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $pattern);
       
$paths = (array) glob($pattern, GLOB_BRACE | GLOB_NOSORT);
       
$this->generator = $this->createGenerator($paths);
        return
$this->generator->valid();
    }

    public function
dir_readdir(): string
   
{
       
$path = $this->generator->current() ?: '';
       
$this->generator->next();
        return
$path;
    }

    public function
dir_rewinddir(): bool
   
{
      
$this->generator->rewind();
        return
$this->generator->valid();
    }

    public function
dir_closedir(): bool
   
{
       
$this->generator = null;
        return
true;
    }
}
?>
Replace glob wrapper:
<?php
stream_wrapper_unregister
('glob');
stream_wrapper_register('glob', 'GlobStreamWrapper');
?>
Example:
<?php
$iterator
= new GlobIterator(__DIR__ . '/{application,system}/src/*.php');
while (
$iterator->valid()) {
    echo
$iterator->current()->getFilename() . '</br>';
   
$iterator->next();
}
?>

官方地址:https://www.php.net/manual/en/globiterator.construct.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3