【PHP8.x】lengthプロパティの使い方

lengthプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

lengthプロパティは、DOMCharacterDataオブジェクトが保持する文字データの長さを整数値で保持するプロパティです。

PHPのDOM拡張機能において、DOMCharacterDataクラスは、XMLやHTMLドキュメント内でテキストノード、コメントノード、CDATAセクションといった文字データを表すノードの基底クラスとして機能します。このlengthプロパティは、これらのDOMCharacterDataオブジェクトが実際に持つ文字列データの文字数を取得するために利用されます。

具体的には、DOMCharacterDataを継承するDOMTextオブジェクトが持つテキストの内容や、DOMCommentオブジェクトが持つコメントの内容など、そのオブジェクトが表す文字データの総文字数を数値として提供します。この長さは、文字列に含まれる実際の文字数を示し、バイト数とは異なります。例えば、「こんにちは」という文字列に対しては「5」という値が返され、マルチバイト文字であっても正しく1文字としてカウントされます。

lengthプロパティは読み取り専用であり、その値を直接変更することはできません。このプロパティを利用することで、対象の文字データの長さを簡単に確認し、その情報に基づいて文字データの操作や検証を行うプログラムのロジックを構築することができます。

構文(syntax)

1<?php
2$dom = new DOMDocument();
3$textNode = $dom->createTextNode('Hello PHP!');
4echo $textNode->length;
5?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

DOMCharacterDataオブジェクトが保持する文字データの文字数を返します。

サンプルコード

PHP: DOMTextのlengthで文字数を取得する

1<?php
2
3/**
4 * DOMCharacterData::length プロパティの使用例
5 *
6 * DOMCharacterData は、XML や HTML ドキュメント内の文字データ(テキストノード、コメント、CDATAセクションなど)を
7 * 表す抽象クラスです。この length プロパティは、その文字データの長さを整数で返します。
8 *
9 * このサンプルコードでは、DOMText クラス(DOMCharacterData を継承)を使ってテキストノードを作成し、
10 * その length プロパティにアクセスする方法を初心者向けに示します。
11 */
12function demonstrateDomCharacterDataLength(): void
13{
14    // 1. 新しい DOMDocument オブジェクトを作成します。
15    //    これはXML/HTMLドキュメント全体を表現する基盤となります。
16    $dom = new DOMDocument('1.0', 'UTF-8');
17
18    // 2. ドキュメントのルートとなる要素 'root' を作成し、ドキュメントに追加します。
19    $root = $dom->createElement('root');
20    $dom->appendChild($root);
21
22    // 3. 'message' という名前の要素を作成し、ルート要素に追加します。
23    //    この要素の中にテキストを格納します。
24    $messageElement = $dom->createElement('message');
25    $root->appendChild($messageElement);
26
27    // 4. 文字列 'これはDOMのテキストです。' を持つ DOMText ノードを作成します。
28    //    DOMText は DOMCharacterData を継承しているため、length プロパティを持ちます。
29    $textNode = $dom->createTextNode('これはDOMのテキストです。');
30
31    // 5. 作成したテキストノードを 'message' 要素に追加します。
32    $messageElement->appendChild($textNode);
33
34    echo "=== DOMCharacterData::length プロパティのデモンストレーション ===\n\n";
35    echo "作成されたDOMTextノードのテキスト: '" . $textNode->nodeValue . "'\n";
36
37    // 6. DOMCharacterData::length プロパティを使用して、テキストノードの文字データの長さを取得します。
38    //    このプロパティは引数なしで、戻り値は整数 (int) です。
39    $nodeLength = $textNode->length;
40    echo "DOMCharacterData::length プロパティによる文字数: " . $nodeLength . "\n";
41
42    // 比較のために、PHPの標準関数を使って同じ文字列の長さを取得します。
43    // strlen() はバイト長を返し、mb_strlen() は文字数を返します。
44    // DOMCharacterData::length はmb_strlen() と同様に、マルチバイト文字を1文字としてカウントします。
45    $stringLengthBytes = strlen($textNode->nodeValue);
46    $stringLengthChars = mb_strlen($textNode->nodeValue, 'UTF-8'); // ドキュメントのエンコーディングに合わせる
47
48    echo "PHPのstrlen()関数によるバイト長: " . $stringLengthBytes . "\n";
49    echo "PHPのmb_strlen()関数による文字数 (UTF-8): " . $stringLengthChars . "\n";
50
51    echo "\n補足: DOMCharacterData::length プロパティは、PHPのmb_strlen()関数(エンコーディング指定あり)と";
52    echo "同様に、マルチバイト文字を1文字として正確にカウントします。\n";
53}
54
55// 関数を実行してデモンストレーションを開始します。
56demonstrateDomCharacterDataLength();

PHP 8 の DOMCharacterData::length プロパティは、XMLやHTMLドキュメント内の文字データの長さを取得するために使用されます。DOMCharacterData クラスは、テキストノード、コメント、CDATAセクションなど、ドキュメントの文字情報を含む部分を抽象的に表現するクラスです。この length プロパティは、そのような文字データの文字数を整数(int)で返します。引数は不要で、該当する DOMCharacterData オブジェクトから直接アクセスして値を取得します。

例えば、DOMCharacterData を継承する DOMText クラスで作成されたテキストノードの文字数を調べたい場合に便利です。このプロパティは、日本語のようなマルチバイト文字を含む文字列であっても、PHPの mb_strlen() 関数(エンコーディング指定あり)と同様に、1文字として正確にカウントします。これは、文字列のバイト数を数える strlen() 関数とは異なる点です。サンプルコードでは、テキストノードを作成し、その length プロパティを使って文字数を取得する方法を示しており、プロパティの正確な挙動を確認できます。

DOMCharacterData::lengthプロパティは、XMLやHTMLドキュメント内のテキストノードやコメントなどの「文字データ」の長さを整数で取得するために使用します。これはDOMTextなど、DOMCharacterDataを継承する特定のDOMオブジェクトに対してのみ有効な点にご注意ください。

PHPの標準関数であるstrlen()がバイト数を数えるのに対し、lengthプロパティはmb_strlen()と同様にマルチバイト文字も1文字として正確にカウントします。そのため、日本語のような文字を含む文字列の文字数をDOM内で取得する際に便利です。

一般的なPHP文字列の長さを取得する場合はmb_strlen()(マルチバイト対応)やstrlen()(バイト数)を使用し、このプロパティはDOM内の文字データの長さに特化して活用してください。

PHP DOMCharacterData::length で文字数を取得する

1<?php
2
3/**
4 * DOMCharacterData::length プロパティの使用例を示す。
5 * DOMCharacterData は、DOMText や DOMComment などのノードが持つ
6 * テキストデータの文字数を取得するために使用されるプロパティです。
7 */
8function demonstrateDomCharacterDataLength(): void
9{
10    // DOMText クラスは DOMCharacterData を継承しており、
11    // テキストノードの文字データを扱います。
12    $textNode = new DOMText('This is a sample text node content.');
13
14    // DOMCharacterData::length プロパティを使って、
15    // ノードが持つテキストデータの文字数を取得します。
16    $textLength = $textNode->length;
17
18    echo "DOMText content: '" . $textNode->nodeValue . "'" . PHP_EOL;
19    echo "Length of DOMText content (using DOMCharacterData::length): " . $textLength . PHP_EOL;
20
21    // DOMComment クラスも DOMCharacterData を継承しており、
22    // コメントノードの文字データを扱います。
23    $commentNode = new DOMComment('A brief comment here.');
24
25    // コメントノードが持つテキストデータの文字数を取得します。
26    $commentLength = $commentNode->length;
27
28    echo "DOMComment content: '" . $commentNode->nodeValue . "'" . PHP_EOL;
29    echo "Length of DOMComment content (using DOMCharacterData::length): " . $commentLength . PHP_EOL;
30}
31
32// 上記の関数を実行し、DOMCharacterData::length の動作を確認します。
33demonstrateDomCharacterDataLength();

PHP 8のDOMCharacterData::lengthプロパティは、DOM(Document Object Model)を操作する際に、テキストデータを保持するノードの文字数を取得するために使用されます。DOMCharacterDataは、DOMText(テキストノード)やDOMComment(コメントノード)などのクラスが継承する基底クラスであり、これら文字データを扱うノードが共通して持つプロパティです。

このlengthプロパティは引数を必要とせず、対象のノードが内部に持つ文字列の文字数を整数(int)として返します。例えば、Webページの内容を表すHTMLやXMLドキュメントをPHPで操作する際、特定のテキスト部分やコメントの文字数を確認したい場合に利用できます。

サンプルコードでは、まずDOMTextオブジェクトを作成し、そのテキストコンテンツ「This is a sample text node content.」の文字数をlengthプロパティで取得しています。結果として29という文字数が表示されます。次に、DOMCommentオブジェクトを作成し、コメント内容「A brief comment here.」の文字数を同様にlengthプロパティで取得しており、こちらは22という文字数になります。このように、DOMCharacterDataを継承するクラスのインスタンスに対して、その内部の文字データの長さを直感的に取得できるため、DOMノードのテキストコンテンツの長さを確認したり、その長さに応じた処理を実装したりする際に非常に役立ちます。

このDOMCharacterData::lengthプロパティは、XMLやHTMLのDOM操作において、テキストノードやコメントノードなどが持つ「文字データの文字数」を取得するために使用されます。PHPでよく使われるcount()関数のように「配列の要素数」を取得するものではなく、またmb_strlen()関数のように「任意の文字列の長さ」を測るものでもない点にご注意ください。このプロパティはDOMTextDOMCommentなど、DOMCharacterDataを継承する特定のDOMノードオブジェクトでのみ利用可能です。戻り値は整数値であり、日本語などのマルチバイト文字も正しく1文字としてカウントされますので、DOMドキュメントの文字内容を処理する際に安全に利用できます。