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

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

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

作成日: 更新日:

基本的な使い方

isIgnorableメソッドは、PhpTokenクラスのインスタンスに対して、そのトークンがPHPのパーサーにとって無視可能かどうかを判定するメソッドです。PHP 8で導入されたPhpTokenクラスは、PHPのソースコードを個々の要素であるトークンに分解し、それぞれをオブジェクトとして扱うことを可能にします。このメソッドは、分解されたトークンがプログラムの実行に直接的な影響を与えない、いわゆる「無視できる」種類のトークンであるかを真偽値で返します。

具体的に無視可能とされるトークンには、ソースコード内の空白文字(スペース、タブ、改行)、単一行コメント(// や #)、複数行コメント(/* ... */)、そしてPHPDocコメントなどが含まれます。これらの要素は、プログラムの処理ロジック自体には関与しませんが、コードの可読性を高めたり、開発者が情報を記述するために存在します。

isIgnorableメソッドは、PHPのソースコードを解析するツール、例えばコードフォーマッターや静的解析ツール、リンターなどを開発する際に非常に有用です。意味のあるコード要素のみを抽出し、それ以外の装飾的な要素を効率的にスキップして処理を進めることで、より正確で堅牢なコード分析を実現できます。このメソッドを利用することで、開発者はPHPコードの構造をより深く理解し、高度なコード操作を行うための基盤を得ることができます。

構文(syntax)

1$phpToken->isIgnorable();

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

このメソッドは、PHPトークンが無視可能なトークン(コメントや空白など)である場合に true を返し、それ以外の場合は false を返します。

サンプルコード

PHPトークンを無視可能か判定する

1<?php
2
3/**
4 * PHP 8のPhpTokenクラスとisIgnorableメソッドの使用例を示します。
5 * この関数は、指定されたPHPコード文字列をトークン化し、
6 * 各トークンが「無視できる」もの(コメント、空白など)であるかを判定して表示します。
7 *
8 * @param string $code チェックするPHPコード文字列
9 */
10function analyzePhpTokens(string $code): void
11{
12    echo "--- 分析対象のPHPコード ---\n";
13    echo "$code\n";
14    echo "---------------------------\n\n";
15
16    // PhpToken::tokenize() を使用してPHPコードをトークンの配列に変換します。
17    // PHP 8以降で利用可能な機能です。
18    $tokens = PhpToken::tokenize($code);
19
20    echo "--- トークン分析結果 ---\n";
21
22    foreach ($tokens as $token) {
23        // isIgnorable() メソッドは、トークンが空白、コメント、またはDOCブロックである場合にtrueを返します。
24        // これらのトークンは、コードの実行には直接影響を与えませんが、ソースコードの可読性に貢献します。
25        $isIgnorable = $token->isIgnorable();
26        $ignorableStatus = $isIgnorable ? "(無視可能)" : "(無視不可能)";
27
28        // トークンの種類(例: T_WHITESPACE, T_COMMENT, T_STRINGなど)と内容、無視可能性を表示します。
29        echo "タイプ: " . $token->token_name() . ", 内容: '" . str_replace("\n", "\\n", $token->text) . "' $ignorableStatus\n";
30    }
31
32    echo "---------------------------\n";
33}
34
35// サンプルPHPコード文字列
36$sampleCode = <<<'PHP_CODE'
37<?php // これは単一行コメントです
38
39/**
40 * これは複数行コメント(DOCブロック)です。
41 */
42$name = "PHP"; // 変数定義
43    $version = 8; // インデントと変数の定義
44/* もう一つの
45   複数行コメント */
46
47echo "Hello, " . $name . " " . $version . "!\n"; // echo文
48PHP_CODE;
49
50// 分析関数を実行
51analyzePhpTokens($sampleCode);
52
53?>

PHP 8で導入されたPhpTokenクラスは、PHPコードを個々の構成要素(トークン)に分解し、それらをオブジェクトとして扱うためのものです。このPhpTokenクラスのisIgnorableメソッドは、特定のトークンがコードの実行に直接影響しない「無視できる」要素であるかを判定するために使用されます。

isIgnorableメソッドは引数を一切取らず、判定結果を真偽値(trueまたはfalse)として返します。具体的には、空白文字(スペース、タブ、改行)、単一行コメント、複数行コメント、そしてPHPDoc形式のコメントなど、主にコードの可読性やドキュメンテーションのために存在する要素である場合にtrueを返します。これに対し、変数名、キーワード、演算子など、コードの構造や意味を形成する重要なトークンに対してはfalseを返します。

提供されたサンプルコードでは、まずPhpToken::tokenize()メソッドを用いてPHPコード文字列をトークンの配列に変換しています。次に、配列内の各トークンに対してisIgnorable()メソッドを呼び出し、そのトークンが空白やコメントなどの無視できる要素であるかどうかを判別し、その結果を表示しています。このメソッドは、コードの自動解析ツールや整形ツールを開発する際に、実行ロジックと関係のない部分を効率的に識別・処理するために非常に有用です。

このサンプルコードで使用されているPhpTokenクラスとPhpToken::tokenize()メソッドは、PHP 8以降で導入された機能です。古いバージョンのPHPでは動作しませんのでご注意ください。

isIgnorable()メソッドは、PHPコード内の空白、単一行コメント、複数行コメント、およびDOCブロックを「無視可能」な要素として識別します。これらの要素は、PHPインタプリタがプログラムを実行する際には処理されず、コードの可読性を高めるために存在します。

したがって、isIgnorable()は主にコードの静的解析ツールや整形ツールを作成する際に、実行ロジックに関係しない部分を効率的にスキップするために利用されます。このメソッド自体がプログラムの実行結果を変えることはありません。解析対象のコードが複雑な場合、改行などの特殊文字は表示時にエスケープすると視認しやすくなります。

PHPコードの無視可能トークンを判定する

1<?php
2
3/**
4 * このスクリプトは、PHPコードをトークンに分解し、
5 * 各トークンがPHPパーサーによって「無視可能」な要素(空白やコメントなど)であるかを判定する方法を示します。
6 * PhpToken::isIgnorable() メソッドは、主に空白文字 (T_WHITESPACE) やコメント (T_COMMENT) に対して true を返します。
7 * これは、コードの構造を解析する際にこれらの要素をスキップできることを意味します。
8 */
9
10// 分析対象となるPHPコードスニペットを定義します。
11$codeSnippet = <<<'PHP_CODE'
12<?php
13
14// これは単一行コメントです。
15$variableName = 123;    /* これは複数行コメントです。 */
16
17echo "Hello, PHP!"; // 出力処理
18PHP_CODE;
19
20echo "--- 分析対象のPHPコード ---" . PHP_EOL;
21echo $codeSnippet . PHP_EOL;
22echo "---------------------------" . PHP_EOL . PHP_EOL;
23
24echo "--- PhpToken::isIgnorable() の結果 ---" . PHP_EOL;
25
26// PhpToken::tokenize() を使用して、PHPコードをトークンの配列に分解します。
27// 各要素はPhpTokenオブジェクトであり、コード内の個々の構成要素(キーワード、変数名、記号、空白など)を表します。
28$tokens = PhpToken::tokenize($codeSnippet);
29
30// 分解された各トークンをループ処理し、isIgnorable() メソッドの結果を表示します。
31foreach ($tokens as $token) {
32    // isIgnorable() メソッドは、そのトークンがパーサーによって無視されるべき要素(例: 空白、コメント)である場合に true を返します。
33    $isIgnorable = $token->isIgnorable();
34
35    // トークンの種類(例: T_WHITESPACE, T_COMMENT, T_VARIABLE)と実際のテキスト内容を表示します。
36    // テキストは、表示の都合上、改行文字などをエスケープして表示しています。
37    echo sprintf(
38        "タイプ: %-20s テキスト: '%-25s' 無視可能: %s" . PHP_EOL,
39        $token->getTokenName(), // トークンの種類の名前を取得
40        str_replace(["\n", "\r", "\t"], ['\\n', '\\r', '\\t'], $token->text), // トークンの元の文字列
41        $isIgnorable ? 'はい' : 'いいえ' // isIgnorable() の結果を分かりやすく表示
42    );
43
44    // 特に空白文字やコメントが「無視可能」と判定される例を強調表示します。
45    if ($token->id === T_WHITESPACE && $isIgnorable) {
46        echo "  -> この空白文字トークンはパーサーによって無視されます。" . PHP_EOL;
47    }
48    if ($token->id === T_COMMENT && $isIgnorable) {
49        echo "  -> このコメントトークンはパーサーによって無視されます。" . PHP_EOL;
50    }
51}
52
53echo PHP_EOL . "--- 分析終了 ---" . PHP_EOL;
54
55?>

PHPの PhpToken::isIgnorable メソッドは、PHP 8の PhpToken クラスに属し、PHPコードをトークンに分解した際に、そのトークンがパーサーによって「無視可能」な要素であるかを判定します。引数はなく、戻り値は bool 型です。

このメソッドが true を返す場合、そのトークンは空白文字(T_WHITESPACE)やコメント(T_COMMENT)のように、プログラムの実行には影響しない、コードの可読性を高めるための要素であることを示します。一方、変数名、キーワード、演算子など、プログラムの論理構造に不可欠なトークンに対しては false を返します。

サンプルコードでは、PHPコードを PhpToken::tokenize() でトークン化し、各トークンに対して isIgnorable() を適用しています。これにより、空白やコメントが「無視可能」と判定され、その他の重要なコード要素が「無視可能ではない」と判定される様子を具体的に確認できます。この機能は、PHPコードの静的解析や自動整形ツール開発において、主要なコード要素に焦点を当てて処理を進めるために役立ちます。

このisIgnorable()メソッドは、PHPのコードを解析する際、PHPパーサーがコードの実行には影響しないと判断し、無視する要素(主に空白文字やコメント)であるかを判定します。初心者が間違いやすい点として、これは単に空白文字だけを判定するのではなく、コメントも「無視可能」と判断されることに注意してください。通常のWebアプリケーション開発でこのメソッドを直接利用する場面は稀で、主にコードの静的解析ツール、コードフォーマッター、IDEなどの開発ツールがPHPコードの構造を分析する際に利用する専門的な機能です。PHP 8以降で導入された機能ですので、古いPHPバージョンでは使用できません。引数は不要で、判定結果は真偽値(trueまたはfalse)で返されます。

関連コンテンツ

関連IT用語

関連プログラミング言語