Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】GlobIterator::getSize()メソッドの使い方

getSizeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getSizeメソッドは、GlobIteratorオブジェクトによって見つかったファイルシステムのエントリの総数を取得するメソッドです。 このメソッドは、GlobIteratorが処理するglobパターン(例:*.txt)に合致したファイルやディレクトリの数を返します。 GlobIteratorクラスは、UNIXのglob()関数に似た機能を提供し、指定されたパターンに一致するパスを反復処理(イテレート)するために使用されます。これにより、ファイルシステム内の特定のファイルを効率的に探索する際に役立ちます。 getSizeメソッドを利用することで、GlobIteratorが内部的に保持している要素の総数を簡単に把握できます。例えば、あるディレクトリ内に存在するすべての.logファイルの数を数えたい場合などに、結果のリストを実際にすべて処理することなく、その総数を知ることができます。 返される値は整数型であり、パターンにマッチするエントリが一つもない場合は0を返します。 この機能は、反復処理を行う前に全体の規模を把握したい場合や、取得した要素数に基づいて条件分岐を行う必要がある場合に特に有用です。 PHP 8環境において、ファイルシステムを扱うアプリケーション開発において、正確なエントリ数を効率的に取得する手段として利用されます。

構文(syntax)

1<?php
2$iterator = new GlobIterator(__DIR__ . '/*.txt');
3$fileCount = $iterator->getSize();
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

GlobIterator::getSize() メソッドは、イテレータが保持するファイルパスの総数を整数型で返します。

サンプルコード

PHP GlobIterator::getSize() でファイル数を取得する

1<?php
2
3/**
4 * GlobIterator::getSize() メソッドの使用例を示します。
5 *
6 * この関数は、指定されたパターンに一致するファイル(またはディレクトリ)の総数を
7 * GlobIterator を使用して取得し、その結果を表示します。
8 *
9 * @return void
10 */
11function demonstrateGlobIteratorGetSize(): void
12{
13    // 現在のスクリプトがあるディレクトリ内のすべての PHP ファイルを対象とするパターン
14    // __DIR__ は現在のファイルのディレクトリパスを示します。
15    // 例: C:\xampp\htdocs\my_project/*.php
16    $pattern = __DIR__ . '/*.php';
17
18    echo "検索パターン: '{$pattern}'\n\n";
19
20    try {
21        // GlobIterator をインスタンス化します。
22        // 指定されたパターンに一致するファイルシステムのパスを反復処理します。
23        $iterator = new GlobIterator($pattern);
24
25        // getSize() メソッドは、イテレータによって見つかったエントリの総数を返します。
26        // これは、パターンに一致するファイルの総数に相当します。
27        $fileCount = $iterator->getSize();
28
29        echo "パターンに一致するファイルの総数: {$fileCount} 件\n";
30
31        // オプション: 見つかったファイルをリスト表示し、何がカウントされたかを具体的に示します。
32        if ($fileCount > 0) {
33            echo "\n--- 見つかったファイル ---\n";
34            foreach ($iterator as $fileInfo) {
35                // SplFileInfo オブジェクトからファイル名を取得します。
36                echo "- " . $fileInfo->getFilename() . "\n";
37            }
38            echo "---------------------------\n";
39        } else {
40            echo "\nパターンに一致するファイルは見つかりませんでした。\n";
41        }
42
43    } catch (UnexpectedValueException $e) {
44        // パターンが無効な場合などに発生する可能性があるエラーを処理します。
45        echo "エラーが発生しました: " . $e->getMessage() . "\n";
46    }
47}
48
49// 関数を実行して、GlobIterator::getSize() の動作を確認します。
50demonstrateGlobIteratorGetSize();
51
52?>

PHP 8のGlobIteratorクラスは、ファイルシステム内で特定のパターンに合致するファイルやディレクトリを効率的に検索し、その結果を反復処理する機能を提供します。このクラスが持つgetSize()メソッドは、引数を一切必要とせず、検索パターンに一致したファイルやディレクトリの総数を整数値(int)として返します。

提示されたサンプルコードでは、__DIR__ . '/*.php'というパターンを用いて、現在のスクリプトと同じディレクトリにあるすべてのPHPファイルを検索対象としています。このパターンでGlobIteratorのインスタンスを生成した後、$iterator->getSize()を呼び出すことで、パターンに一致したPHPファイルの合計数が$fileCountに格納され、画面に表示されます。ファイルが見つからない場合は0が返されます。このメソッドは、特定の種類のファイルがいくつ存在するかを確認したい場合や、ファイル操作を行う前に数を把握したい場合に非常に有用です。エラー処理も組み込まれており、実用的なコードの書き方を学ぶことができます。

PHPのGlobIterator::getSize()は、指定したパターンに合致するファイルやディレクトリの「総数」を整数で返します。ファイルの容量ではなく、その「数」である点にご注意ください。パターン指定はファイルシステムのパスを対象とするため、ワイルドカードの誤用は意図しない結果を招く可能性があります。大量のファイルを検索する場合、処理速度に影響を及ぼすことがあるため、パフォーマンスを考慮してご利用ください。また、ユーザーからの入力をパターンに直接使用するとセキュリティリスクがあるため、必ず検証とサニタイズが必要です。パターンが無効な場合はUnexpectedValueExceptionが発生するため、適切なエラーハンドリングを実装することが重要です。

関連コンテンツ