【PHP8.x】Dom\TokenList::count()メソッドの使い方
countメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『countメソッドは、Dom\TokenListオブジェクトに含まれるトークンの数を数える処理を実行するメソッドです。Dom\TokenListは、主にHTML要素のclassListプロパティとして利用され、スペースで区切られたトークン、通常はCSSのクラス名の集合を表現します。このメソッドは、Dom\TokenListクラスがPHPのCountableインターフェースを実装していることにより提供されています。そのため、このメソッドを直接呼び出す代わりに、count()関数をDom\TokenListオブジェクトに適用しても同様にトークンの数を取得することが可能です。メソッドの戻り値は、リスト内に存在するトークンの総数を表す整数値です。もしトークンが一つも含まれていない空のリストであれば、0が返されます。例えば、class="item featured new"という属性を持つHTML要素から取得したDom\TokenListオブジェクトに対してこのメソッドを使用すると、結果として3が返ります。このように、要素に設定されているクラスの数をプログラムで簡単に把握するために使用されます。
構文(syntax)
1<?php 2 3$document = new \DOMDocument(); 4$document->loadHTML('<div class="token1 token2 token3"></div>', LIBXML_NOERROR); 5$element = $document->getElementsByTagName('div')[0]; 6$tokenList = $element->classList; 7 8$count = $tokenList->count(); 9 10var_dump($count); 11 12?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、DOMTokenListオブジェクトに含まれるトークンの数を整数で返します。
サンプルコード
Dom\TokenListのカウント方法
1<?php 2 3/** 4 * Dom\TokenList クラスが Countable インターフェースを実装していることを示すサンプルコードです。 5 * count() 関数と count() メソッドの両方でトークン数を取得できます。 6 */ 7function demonstrateTokenListCountable(): void 8{ 9 // DOMDocumentを使用してHTMLを解析します。 10 $dom = new DOMDocument(); 11 12 // class属性に複数のトークン(クラス名)を持つHTML要素を定義します。 13 // この例では "foo", "bar", "baz" の3つのクラストークンがあります。 14 $dom->loadHTML('<div id="myElement" class="foo bar baz"></div>'); 15 16 // id属性を元に要素を取得します。 17 // getElementById() の返り値は null の可能性があるため、型チェックが推奨されます。 18 $element = $dom->getElementById('myElement'); 19 if (!$element instanceof DOMElement) { 20 echo '指定されたIDの要素が見つかりませんでした。' . PHP_EOL; 21 return; 22 } 23 24 // 要素の classList プロパティは Dom\TokenList オブジェクトを返します。 25 $tokenList = $element->classList; 26 27 // Dom\TokenList は Countable インターフェースを実装しています。 28 // そのため、count() 関数を使用してリスト内のトークン数を取得できます。 29 // これがキーワード「php countable」に最も関連性の高い使い方です。 30 $countByFunction = count($tokenList); 31 echo "count(\$tokenList) を使用した場合のトークン数: " . $countByFunction . PHP_EOL; 32 33 // もちろん、Dom\TokenList::count() メソッドを直接呼び出すことも可能です。 34 // 戻り値は同じくリスト内のトークン数(この場合は3)です。 35 $countByMethod = $tokenList->count(); 36 echo "\$tokenList->count() を使用した場合のトークン数: " . $countByMethod . PHP_EOL; 37} 38 39// 関数を実行して結果を表示します。 40demonstrateTokenListCountable(); 41 42?>
Dom\TokenList::count() は、HTML要素の class 属性などに含まれるトークンの数を取得するためのメソッドです。このメソッドは引数を取らず、戻り値としてトークンの総数を整数(int)で返します。
Dom\TokenList クラスはPHPの Countable インターフェースを実装しています。これは、オブジェクトの要素数を数えられるようにするための仕組みです。そのため、$tokenList->count() のようにメソッドとして呼び出すだけでなく、PHPの組み込み関数である count() を使って count($tokenList) という形式でも、同様にトークン数を取得できます。
サンプルコードでは、「foo bar baz」という3つのクラス名を持つHTML要素から Dom\TokenList オブジェクトを取得しています。このオブジェクトに対して count() 関数と count() メソッドの両方を実行し、トークン数を取得しています。class 属性には3つのトークンが含まれているため、どちらの方法で実行しても結果は「3」となります。このように、Dom\TokenList が Countable を実装していることで、柔軟な方法でトークンの数を数えることができます。
getElementById()は指定したIDの要素が見つからない場合にnullを返すため、必ず値の存在を確認してからclassListプロパティにアクセスすることが重要です。この確認を怠ると、nullに対して操作しようとしてエラーが発生する原因となります。また、element->classListが返すのは単なる文字列ではなく、Dom\TokenListという専用のオブジェクトである点にも注意してください。このオブジェクトはCountableインターフェースを実装しているため、サンプルコードのようにcount()関数とcount()メソッドのどちらの方法でもトークン数を取得できます。PHPでは、配列など数えられる値の要素数を取得する際には、汎用的なcount()関数がよく使われます。
PHP: Dom\TokenListのクラス数をcountする
1<?php 2 3/** 4 * Dom\TokenListの要素数をcount()関数で取得するサンプルコード 5 */ 6function demonstrateTokenListCount(): void 7{ 8 // 対象となるHTML文字列を定義します。 9 // このdiv要素には "item", "active", "featured" の3つのクラスがあります。 10 $html = '<div class="item active featured"></div>'; 11 12 // Dom\Document オブジェクトを生成します。 13 // PHP 8 からは `Dom` 名前空間が使用されます。 14 $document = new Dom\Document(); 15 16 // HTML文字列を読み込みます。 17 // 不完全なHTMLでの警告を抑制するためにエラー制御演算子 @ を使用します。 18 @$document->loadHTML($html); 19 20 // getElementsByTagNameで'div'要素を取得します。 21 // ->item(0)で最初に見つかった要素を取得します。 22 $element = $document->getElementsByTagName('div')->item(0); 23 24 // 要素のclassListプロパティからDom\TokenListオブジェクトを取得します。 25 $tokenList = $element->classList; 26 27 // Dom\TokenListはCountableインターフェースを実装しているため、 28 // PHPの組み込み関数であるcount()で要素数(クラスの数)を取得できます。 29 // これは $tokenList->count() を呼び出すのと同じ結果になります。 30 $classCount = count($tokenList); 31 32 // 結果を出力します。 33 echo "要素に含まれるクラスの数: " . $classCount . PHP_EOL; 34} 35 36// 関数を実行します 37demonstrateTokenListCount(); 38
このPHPサンプルコードは、HTML要素のclass属性に含まれるクラスの総数を取得する方法を示しています。
まず、Dom\Documentクラスを用いてHTML文字列を解析し、指定したdiv要素を取得します。次に、その要素のclassListプロパティからDom\TokenListオブジェクトを取得します。このDom\TokenListは、要素のクラス属性を個々のクラス名のリストとして扱うためのものです。
Dom\TokenListクラスは、PHPのCountableという仕組みを実装しています。これにより、配列の要素数を数えるときと同じように、PHPの組み込み関数であるcount()を使ってリスト内の要素数を簡単に数えることができます。
サンプルコードのcount($tokenList)は、$tokenListが保持するトークン、つまり "item", "active", "featured" という3つのクラス名の数を数えます。このcount()関数は引数を取らず、戻り値として要素の総数を整数(int)で返します。そのため、この場合の実行結果は3となります。最終的に、この結果が画面に出力されます。
PHP 8から利用できるDom\TokenListの要素数は、組み込みのcount()関数で取得できます。コードを利用する際は、getElementsByTagNameで要素が見つからない場合に後続のclassListへのアクセスでエラーが発生する可能性がある点に注意してください。処理の前に要素が取得できたかを確認すると、より安全なコードになります。また、サンプルにあるエラー抑制演算子@は、エラーの原因究明を難しくすることがあるため、意図を理解した上で限定的に使用することが推奨されます。Dom\TokenListはCountableインターフェースを実装しているためcount()関数が使え、これはオブジェクト自身のcount()メソッドを呼び出すのと同じ動作をします。