【PHP8.x】GlobIterator::getExtension()メソッドの使い方
getExtensionメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getExtensionメソッドは、GlobIteratorクラスに属し、現在処理しているファイルの拡張子を取得するメソッドです。
GlobIteratorクラスは、ファイルシステム上で指定されたパターン(例えば、「*.txt」のようにワイルドカードを含む文字列)に一致するファイルやディレクトリを検索し、それらを順に処理するための機能を提供するクラスです。例えば、特定のディレクトリ内にあるすべての画像ファイルや、特定の形式のドキュメントだけを対象に処理を行いたい場合に役立ちます。
このgetExtensionメソッドは、GlobIteratorが現在ポイントしているファイルの名前から、拡張子の部分を特定し、その文字列を返します。例えば、「document.pdf」というファイル名の場合、「pdf」という文字列が戻り値となります。拡張子を使ってファイルの種別を判断したり、特定の種類のファイルをグループ化して処理したりする場合に非常に便利です。ファイル名から拡張子を自分で解析する手間を省き、より直感的かつ効率的にファイル情報にアクセスできるようになります。拡張子がないファイルに対しては、空の文字列が返されます。このメソッドはPHP 8以降のバージョンで利用可能です。
構文(syntax)
1<?php 2$globIterator = new GlobIterator('*.php'); 3$extension = $globIterator->getExtension(); 4?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
GlobIteratorクラスのgetExtensionメソッドは、ファイル名の拡張子部分を文字列で返します。
サンプルコード
PHP GlobIterator でファイル拡張子を取得する
1<?php 2 3/** 4 * GlobIterator を使用して、指定されたパターンに一致するファイルの拡張子を表示します。 5 * 6 * この関数は、ファイルシステムを反復処理し、各ファイルの情報を取得する方法を示します。 7 * 特に、ファイルの拡張子を取得する `getExtension` メソッドの使用例を提供します。 8 * 9 * PHP 8 の GlobIterator は FilesystemIterator を継承し、 10 * 各要素を SplFileInfo オブジェクトとして返します。 11 * getExtension メソッドは、この SplFileInfo オブジェクトに存在します。 12 */ 13function showFileExtensionsByGlob() 14{ 15 // PHPスクリプトと同じディレクトリ内の全てのファイルとディレクトリを対象とします。 16 // 例: example.php, document.txt, image.jpg などが想定されます。 17 // スクリプト実行前に、テスト用のファイルをこのディレクトリに作成すると動作を確認できます。 18 // 例: touch('test_file.php'); touch('document.pdf'); touch('noextension'); 19 $iterator = new GlobIterator(__DIR__ . '/*'); 20 21 // イテレータが空の場合(指定されたパターンに一致するファイルが見つからない場合)のメッセージ。 22 if (!$iterator->valid()) { 23 echo "指定されたパターンに一致するファイルが見つかりませんでした。\n"; 24 echo "テスト用のファイルをこのディレクトリに作成してみてください。\n"; 25 return; 26 } 27 28 echo "--- ファイル拡張子リスト ---\n"; 29 30 // GlobIterator はイテレーション中に SplFileInfo クラスのインスタンスを返します。 31 // SplFileInfo オブジェクトは、ファイル名、パス、拡張子などの詳細情報を提供します。 32 foreach ($iterator as $fileInfo) { 33 // ディレクトリは処理をスキップし、ファイルのみを対象とします。 34 if ($fileInfo->isDir()) { 35 continue; 36 } 37 38 // SplFileInfo::getExtension() メソッドを使用して、ファイルの拡張子を取得します。 39 // 例えば 'my_document.txt' からは 'txt' を返します。 40 // 'archive.tar.gz' の場合は 'gz' を返します。 41 $extension = $fileInfo->getExtension(); 42 43 // ファイル名と拡張子を整形して表示します。 44 // 拡張子がない場合は "(なし)" と表示します。 45 echo sprintf( 46 "ファイル名: %-30s 拡張子: %s\n", 47 $fileInfo->getFilename(), 48 empty($extension) ? '(なし)' : $extension 49 ); 50 } 51 52 echo "--------------------------\n"; 53 54 // 注意: このスクリプトはテスト用のファイルを自動で作成・削除しません。 55 // テスト後は必要に応じて手動でファイルを削除してください。 56} 57 58// 関数を実行します。 59showFileExtensionsByGlob();
このPHPサンプルコードは、GlobIteratorというクラスとgetExtensionメソッドを使って、指定されたディレクトリ内のファイルから拡張子を取得し表示する方法を具体的に示しています。
まず、GlobIteratorは、__DIR__ . '/*' のようにワイルドカードを含むパターンを指定することで、現在のスクリプトと同じディレクトリにあるファイルやディレクトリを効率的に見つけ出します。このイテレータをforeachで反復処理すると、各要素はファイルに関する詳細情報を持つSplFileInfoというオブジェクトとして取得できます。
このSplFileInfoオブジェクトが提供するgetExtensionメソッドは、そのファイル名から拡張子を文字列として取得する役割を持っています。このメソッドは引数を必要とせず、例えば「document.txt」からは「txt」を、「archive.tar.gz」からは「gz」といった文字列を返します。もしファイルに拡張子がない場合は、空の文字列が戻り値となります。
コードでは、GlobIteratorで見つかった項目の中からディレクトリを除外し、ファイルだけを対象とします。そして、それぞれのSplFileInfoオブジェクトからgetExtensionメソッドを呼び出し、取得した拡張子をファイル名とともに整形して表示しています。これにより、ファイルシステムを操作し、特定のファイル情報(この場合は拡張子)を取り出す基本的な手法を学ぶことができます。
このサンプルコードのgetExtensionメソッドは、GlobIteratorが返すSplFileInfoオブジェクトのものです。GlobIterator自体が直接持つメソッドではないためご注意ください。getExtensionはファイル名の最後のドット以降の文字列を拡張子と判断しますので、archive.tar.gzのようなファイルからはgzが取得されます。
サンプルコード内の__DIR__ . '/*'というパスパターンは、スクリプトが実行されているディレクトリ内の全てのファイルとディレクトリを対象とします。パターン指定を誤ると意図しないファイルを処理する可能性があるため、注意が必要です。
テスト実行の際は、意図したファイルがカレントディレクトリに存在するかを確認してください。ファイルが見つからない場合は、適切なメッセージが表示されます。また、テスト用のファイルは、スクリプト実行後に手動で削除するようにしてください。