PHP Conference Japan 2024

GlobIterator::__construct

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

GlobIterator::__construct使用 glob 建構目錄

說明

public GlobIterator::__construct(字串 $pattern, 整數 $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

從 glob 表達式建構新的目錄迭代器。

參數

pattern

一個 glob() 模式。

flags

選項旗標,旗標可以是 FilesystemIterator 常數的位元遮罩。

錯誤/例外

如果 directory 不存在,則拋出 UnexpectedValueException

如果 directory 是空字串,則拋出 ValueError

更新日誌

版本 說明
8.0.0 現在如果 directory 是空字串,則拋出 ValueError;以前它拋出 RuntimeException

範例

範例 #1 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());
}
}
?>

上述範例將輸出類似以下的內容

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

另請參考

新增註釋

使用者貢獻的註釋 2 則註釋

info at ensostudio dot ru
4 年前
修正樣板中大括號的問題
<?php
class GlobStreamWrapper
{
private
$generator;

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

public function
dir_opendir(string $pattern, int $options = 0): bool
{
$pattern = substr($pattern, 7); // 裁剪 'glob://' 前綴
$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;
}
}
?>
取代 glob wrapper
<?php
stream_wrapper_unregister
('glob');
stream_wrapper_register('glob', 'GlobStreamWrapper');
?>
範例
<?php
$iterator
= new GlobIterator(__DIR__ . '/{application,system}/src/*.php');
while (
$iterator->valid()) {
echo
$iterator->current()->getFilename() . '</br>';
$iterator->next();
}
?>
ozana at omdesign dot cz
10 年前
GlobIterator 無法支援 GLOB_BRACE!

<?php
$iterator
= new GlobIterator(getcwd. '/*.{php,txt}'); // 產生一個空陣列
?>
To Top