PHP Conference Japan 2024

GlobIterator 類別

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

簡介

以類似 glob() 的方式迭代檔案系統。

類別概要

類別 GlobIterator 繼承自 FilesystemIterator 實作 Countable {
/* 繼承的常數 */
/* 方法 */
公開 __construct(字串 $pattern, 整數 $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)
公開 count(): 整數
/* 繼承方法 */
公開 SplFileInfo::getBasename(字串 $suffix = ""): 字串
公開 SplFileInfo::openFile(字串 $mode = "r", 布林值 $useIncludePath = false, ?資源 $context = null): SplFileObject
公開 SplFileInfo::setFileClass(字串 $class = SplFileObject::class):
公開 SplFileInfo::setInfoClass(字串 $class = SplFileInfo::class):
}

目錄

新增註記

使用者貢獻的註記 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 封裝器
<?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();
}
?>
info at ensostudio dot ru
3 年前
注意:「類似於 glob() 的方式」GlobIterator 使用串流包裝器「glob://」= 使用 glob()
To Top