【PHP8.x】Dom\Text::lengthプロパティの使い方
lengthプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
lengthプロパティは、PHP 8のDom\Textクラスに属し、テキストノードの長さを保持するプロパティです。このプロパティは、PHPのDOM(Document Object Model)拡張機能の一部として提供され、XMLやHTMLドキュメントのツリー構造において、純粋なテキストコンテンツを表すDom\Textオブジェクトが持つテキストの長さを取得するために利用されます。
Dom\Textクラスのインスタンスは、例えばHTMLドキュメント内の段落タグ(<p>)の内部にある「こんにちは、世界!」といった文字列そのものをオブジェクトとして扱います。このlengthプロパティにアクセスすることで、そのテキスト文字列に含まれる文字の総数を、整数値(int型)として取得することができます。これは、テキストコンテンツの文字数を正確に把握したい場合に非常に役立ちます。
例えば、Webアプリケーションでユーザーが入力したテキストのバリデーション(入力されたテキストが長すぎないか確認するなど)や、表示領域に合わせてテキストを切り詰める処理を行う際に利用できます。このプロパティは読み取り専用であり、直接値を設定することはできません。Dom\Textオブジェクトのテキスト内容が変更されると、lengthプロパティの値は自動的に更新され、常に現在のテキストの長さを反映します。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$element = $dom->createElement('p'); 4$textNode = $dom->createTextNode('これはサンプルテキストです。'); 5$element->appendChild($textNode); 6$dom->appendChild($element); 7 8$textObject = $element->firstChild; 9 10echo $textObject->length;
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このプロパティは、ノードに含まれる文字数を整数(int)で返します。
サンプルコード
PHP Dom\Text::length で文字数を取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * Dom\Text->length プロパティを使用して、HTML内のテキストの文字数を取得し表示します。 7 * 8 * このサンプルは、PHPのDOM拡張機能を使ってHTMLドキュメントを解析し、 9 * 特定のテキストノード(Dom\Textオブジェクト)の文字数を取得する方法を示します。 10 * `length` プロパティは、テキストノードに含まれる文字の数を整数で返します。 11 */ 12function showDomTextLengthExample(): void 13{ 14 // 1. 解析対象のHTML文字列を準備します。 15 $htmlString = '<!DOCTYPE html> 16<html lang="ja"> 17<head> 18 <meta charset="UTF-8"> 19 <title>サンプル</title> 20</head> 21<body> 22 <p>こんにちは PHP 8!</p> 23</body> 24</html>'; 25 26 // 2. DOMDocumentオブジェクトを作成し、HTML文字列を読み込みます。 27 $dom = new DOMDocument(); 28 // HTMLのパース時に発生する警告を抑制します。 29 @$dom->loadHTML($htmlString); 30 31 // 3. ドキュメントから最初の <p> 要素を取得します。 32 $pElement = $dom->getElementsByTagName('p')->item(0); 33 34 // 4. <p>要素の最初の子ノードがテキストノードであることを確認します。 35 // `Dom\Text` は、PHP 8.0で導入された `DOMText` クラスのエイリアスです。 36 if ($pElement && $pElement->firstChild instanceof \Dom\Text) { 37 /** @var \Dom\Text $textNode */ 38 $textNode = $pElement->firstChild; 39 40 // 5. `length` プロパティでテキストノードの文字数を取得します。 41 // マルチバイト文字(日本語など)も1文字として正しくカウントされます。 42 $length = $textNode->length; 43 44 // 6. テキストの内容と取得した文字数を出力します。 45 echo "テキスト: '" . $textNode->textContent . "'" . PHP_EOL; 46 echo "文字数: " . $length . PHP_EOL; 47 } else { 48 echo "テキストノードが見つかりませんでした。" . PHP_EOL; 49 } 50} 51 52// 関数を実行して結果を表示します。 53showDomTextLengthExample(); 54 55?>
Dom\Text->lengthは、PHPでHTMLなどのドキュメントを解析する際に、テキスト部分(テキストノード)が持つ文字列の長さを取得するためのプロパティです。このプロパティにアクセスすると、戻り値としてそのテキストに含まれる総文字数が整数(int型)で返されます。プロパティであるため、特別な引数は必要ありません。
このプロパティの重要な点は、日本語のようなマルチバイト文字を1文字として正確に数えることです。例えばstrlen()関数がバイト数を返すのに対し、lengthプロパティは見た目通りの文字数を返すため、多言語のコンテンツを扱う際に非常に便利です。
サンプルコードでは、HTMLドキュメント内の<p>タグに含まれる「こんにちは PHP 8!」というテキストノードを取得しています。そして、そのテキストノードのlengthプロパティを参照することで、文字列の長さを取得し、画面に出力しています。このように、lengthプロパティを使えば、DOM構造内の特定のテキストコンテンツの文字数を簡単に、かつ正確に把握することが可能です。
Dom\Text->length プロパティは、日本語のようなマルチバイト文字も1文字として正確に数えます。サンプルコードの item(0) や firstChild は、指定した要素が存在しない場合にエラーの原因となるため、if文で必ず存在を確認してからプロパティにアクセスすることが重要です。また、@$dom->loadHTML() の @ はエラー表示を抑制しますが、開発中はHTML構造の問題を発見するために、エラー内容を確認することをお勧めします。このプロパティは、あくまで一つのテキストノードの長さを返す点にも注意してください。要素内に複数のテキストやタグが混在している場合、全体の文字数を取得するには textContent プロパティと mb_strlen 関数を組み合わせるなどの工夫が必要になります。
PHPで配列の長さを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 配列の要素数(長さ)を取得して表示します。 7 * 8 * @param array<int, string> $items 対象の配列 9 * @return void 10 */ 11function printArrayLength(array $items): void 12{ 13 // count() 関数は、配列に含まれる要素の数を返します。 14 // これが PHP で配列の「長さ」を取得する最も一般的な方法です。 15 $length = count($items); 16 17 echo '配列の要素数(長さ)は ' . $length . ' です。' . PHP_EOL; 18} 19 20// サンプルとして使用する配列を定義します。 21$fruits = ['apple', 'banana', 'cherry']; 22 23// 関数を呼び出して、配列の長さを表示します。 24printArrayLength($fruits); 25 26// 実行結果: 27// 配列の要素数(長さ)は 3 です。 28 29?>
このPHPサンプルコードは、配列にいくつの要素が含まれているか、つまり配列の長さ(要素数)を取得する方法を示しています。PHPにおいて、配列の長さを調べるためにはcount()という組み込み関数を使用するのが最も一般的です。
コードでは、まずprintArrayLengthという関数が定義されています。この関数は、引数として調べたい配列($items)を受け取ります。関数の内部では$length = count($items);という処理が行われています。ここで使われているcount()関数は、引数に指定された配列の要素数を数え、その結果を整数(int)で返します。この戻り値が変数$lengthに格納される仕組みです。関数の役割は、受け取った配列の長さを計算し、その結果を画面に出力することです。
コードの後半で、3つの要素を持つ$fruits配列を定義し、それをprintArrayLength関数に渡して呼び出しています。そのため、count()関数は3を返し、最終的に「配列の要素数(長さ)は 3 です。」というメッセージが出力されます。このようにcount()関数は、配列の大きさを知りたいときに使う基本的な関数です。
PHPで配列の要素数(長さ)を取得するには、サンプルコードのように count() 関数を使用するのが標準的です。他のプログラミング言語と異なり、PHPの配列には length というプロパティは存在しません。そのため、$配列->length のようにアクセスするとエラーになる点に注意が必要です。リファレンス情報にある length は、XMLやHTMLを扱う Dom\Text クラスのプロパティであり、ここで使われている配列とは用途が全く異なります。なお、count() と同じ機能を持つ sizeof() という関数もありますが、一般的に count() の使用が推奨されています。