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

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

作成日: 更新日:

基本的な使い方

『lengthプロパティは、DOMNamedNodeMapオブジェクトに含まれるノードの数を保持するプロパティです。DOMNamedNodeMapは、XMLやHTMLドキュメントにおける要素の属性の集合を管理するためのオブジェクトです。例えば、あるHTML要素が3つの属性を持っている場合、その要素の属性コレクションを表すDOMNamedNodeMapオブジェクトのlengthプロパティの値は3になります。もし属性が一つもなければ、値は0となります。このプロパティは、特定の要素が持つ属性の総数をプログラムで動的に確認したい場合に非常に役立ちます。主に、forループなどの繰り返し処理と組み合わせて使用され、コレクション内の全ての属性ノードを一つずつ順番に処理する際のループ回数を決定するために利用されます。なお、このプロパティは読み取り専用であり、直接値を代入して属性の数を変更することはできません。属性の数を変更するには、DOMNamedNodeMapが提供する専用のメソッドを用いて属性を追加または削除する必要があります。』

構文(syntax)

1<?php
2$html = '<p id="element" class="main" lang="ja"></p>';
3
4$doc = new DOMDocument();
5$doc->loadHTML($html);
6
7$element = $doc->getElementById('element');
8
9// DOMNamedNodeMapオブジェクトを取得
10$attributes = $element->attributes;
11
12// lengthプロパティで属性の数を取得
13$numberOfAttributes = $attributes->length;
14?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

DOMNamedNodeMap オブジェクトに含まれるノードの数を返します。この値は整数で表されます。

サンプルコード

PHP DOMNamedNodeMap::length で属性数を取得する

1<?php
2
3/**
4 * DOMNamedNodeMap の length プロパティを使用して、
5 * XML要素の属性の数を取得するサンプルコードです。
6 *
7 * DOMNamedNodeMap::length は、要素に付与された属性の「数」を返します。
8 * 各属性の値は文字列であるため、キーワード「文字列」に関連付けて説明します。
9 */
10function demonstrateDomNamedNodeMapLength(): void
11{
12    // 新しいDOMドキュメントを作成します。
13    $dom = new DOMDocument('1.0', 'UTF-8');
14    $dom->formatOutput = true; // 出力を整形します
15
16    // ルート要素を作成し、ドキュメントに追加します。
17    $rootElement = $dom->createElement('product');
18    $dom->appendChild($rootElement);
19
20    // ルート要素に複数の属性を追加します。
21    // これらの属性の値はそれぞれ文字列です。
22    $rootElement->setAttribute('id', 'P001');
23    $rootElement->setAttribute('name', 'Sample Widget');
24    $rootElement->setAttribute('price', '19.99');
25    $rootElement->setAttribute('currency', 'USD');
26
27    // DOMNamedNodeMap オブジェクトを取得します。
28    // これは、要素に存在するすべての属性(名前と値のペア)のコレクションです。
29    $attributesMap = $rootElement->attributes;
30
31    // DOMNamedNodeMap の 'length' プロパティにアクセスして、属性の数を取得します。
32    // この 'length' は、コレクション内の項目数(ここでは属性の数)を示し、
33    // 特定の文字列の長さを測るものではないことに注意してください。
34    $numberOfAttributes = $attributesMap->length;
35
36    echo "生成されたXML要素 '<product>' の属性の数: " . $numberOfAttributes . "\n";
37    echo "(各属性 'id', 'name', 'price', 'currency' の値は文字列です。)\n";
38
39    // 例として、属性名と値を全て表示してみます。
40    echo "\n存在する属性とその値:\n";
41    foreach ($attributesMap as $attr) {
42        echo "- " . $attr->name . ": " . $attr->value . "\n";
43    }
44}
45
46// 関数を実行して、DOMNamedNodeMap::length の動作を確認します。
47demonstrateDomNamedNodeMapLength();

PHP 8で利用できるDOMNamedNodeMap::lengthプロパティは、XML要素に付与された属性の数を取得するために使用されます。DOMNamedNodeMapは、HTMLやXMLドキュメントの操作で使われるオブジェクトで、特定の要素が持つすべての属性(名前と値のペア)のコレクションを表します。このlengthプロパティは、そのコレクションに含まれる属性の総数を整数値(int)として返します。引数は必要ありません。

サンプルコードでは、<product>というXML要素を作成し、idnamepricecurrencyという複数の属性を追加しています。これらの属性、例えばidの値は「P001」のように文字列で構成されています。しかし、DOMNamedNodeMap::lengthが返すのは、これらの「文字列の長さ」ではなく、<product>要素に付与された「属性の数」です。したがって、この例では4つの属性が追加されているため、lengthプロパティは「4」という整数値を返します。これにより、ある要素がいくつの属性を持っているかを簡潔に確認することができます。

このサンプルコードで使用しているDOMNamedNodeMap::lengthプロパティは、XML要素に付与された属性の総数を整数(int)で取得します。初心者が混同しやすい点として、lengthという単語からPHPのstrlen()関数のように文字列の長さを測ると誤解されやすいですが、これはDOM要素が持つ属性の数を返します。キーワードの「文字列」は各属性の値が文字列であることを指し、lengthプロパティ自身が文字列の長さを測るわけではないことに注意してください。特定の属性値の文字列長を知りたい場合は、その属性値に対してstrlen()関数を別途適用する必要があります。属性が存在しない場合は0を返すため、その場合の処理も考慮してください。このプロパティはコレクション内の要素数を参照する読み取り専用です。

PHP: DOMNamedNodeMap の length で属性数を取得する

1<?php
2
3/**
4 * DOMNamedNodeMap::length プロパティの使用例
5 * システムエンジニアを目指す初心者向けに、DOM要素の属性の数を取得する方法を示します。
6 */
7function demonstrateDomNamedNodeMapLength(): void
8{
9    // 1. DOMDocument オブジェクトを作成します。
10    $dom = new DOMDocument();
11
12    // 2. ルート要素 'example' を作成し、DOMDocument に追加します。
13    $element = $dom->createElement('example');
14    $dom->appendChild($element);
15
16    // 3. 要素にいくつかの属性を追加します。
17    $element->setAttribute('id', 'item1');
18    $element->setAttribute('class', 'active');
19    $element->setAttribute('data-value', '123');
20
21    // 4. 要素の属性リスト (DOMNamedNodeMap) を取得します。
22    // DOMNamedNodeMap は、要素に設定された属性のコレクションです。
23    // これは、PHPの配列のように複数の項目(属性)を保持します。
24    $attributes = $element->attributes;
25
26    // 5. DOMNamedNodeMap の length プロパティにアクセスして属性の数を取得します。
27    // length は、このコレクションに含まれる属性の数を整数 (int) で返します。
28    $numberOfAttributes = $attributes->length;
29
30    // 6. 取得した属性の数を出力します。
31    echo "要素 'example' に設定されている属性の数: " . $numberOfAttributes . PHP_EOL;
32
33    // 別の例: 属性がない要素の場合
34    $emptyElement = $dom->createElement('empty_example');
35    $dom->appendChild($emptyElement);
36    $emptyAttributes = $emptyElement->attributes;
37    $numberOfEmptyAttributes = $emptyAttributes->length;
38    echo "要素 'empty_example' (属性なし) の属性数: " . $numberOfEmptyAttributes . PHP_EOL;
39}
40
41// 関数を実行してサンプルコードの動作を確認します。
42demonstrateDomNamedNodeMapLength();

PHPのDOMNamedNodeMap::lengthプロパティは、HTMLやXMLドキュメントを扱うDOM(Document Object Model)拡張機能で利用されます。DOMNamedNodeMapは、特定のDOM要素(例えばHTMLタグ)に設定された属性(例:id="foo"class="bar")の集合を管理するオブジェクトです。このプロパティは、そのDOMNamedNodeMapが保持する属性の総数を取得するために使われます。引数は必要なく、常に整数型(int)で属性の数を戻り値として返します。

サンプルコードでは、まずDOMDocumentを作成し、exampleという要素にidclassdata-valueという3つの属性を設定しています。その後、$element->attributesを通して、この要素の属性コレクションであるDOMNamedNodeMapを取得します。PHPの配列のように属性をまとめているこのオブジェクトに対し、$attributes->lengthと記述することで、設定されている属性の数を簡単に取得できます。この場合、3つの属性があるため「3」が出力されます。また、属性が全くない要素に対してlengthプロパティを使用すると、「0」が返されることも確認でき、DOM要素の属性の数を正確に把握する際に非常に有用です。

DOMNamedNodeMap::lengthプロパティは、PHPの一般的な「配列」の要素数を取得するものではなく、XMLやHTMLのDOM要素に設定された「属性のコレクション(DOMNamedNodeMap)」の項目数を示します。PHPで配列の要素数を取得するcount()関数とは異なり、$attributes->lengthのようにプロパティとして直接アクセスすることにご注意ください。戻り値は常に整数型(int)であり、対象の要素に属性が一つもない場合でも0が返されるため、安全に利用できます。このプロパティは、DOM操作において特定の要素が持つ属性の数を効率的に確認する際に役立ちます。

【PHP8.x】lengthプロパティの使い方 | いっしー@Webエンジニア