PHP Conference Nagoya 2025

GlobIterator::__construct

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

GlobIterator::__constructConstruit un itérateur de type glob

Description

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

Construit un itérateur de type glob.

Liste de paramètres

pattern

Un motif (pattern) glob().

flags

Les options, qui peuvent être un champ de bits de constantes de classe FilesystemIterator.

Erreurs / Exceptions

Lance une exception UnexpectedValueException si le répertoire n'existe pas.

Lance une exception ValueError si directory est une chaîne vide.

Historique

Version Description
8.0.0 Lance désormais une exception ValueError quand directory est une chaîne vide ; Auparavant, une RuntimeException était lancée.

Exemples

Exemple #1 Exemple avec GlobIterator

<?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());
}
}
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Voir aussi

add a note

User Contributed Notes 2 notes

up
3
info at ensostudio dot ru
4 years 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();
}
?>
up
2
ozana at omdesign dot cz
10 years ago
GlobIterator doesn’t have a way to support GLOB_BRACE!

<?php
$iterator
= new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
To Top