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

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

作成日: 更新日:

基本的な使い方

『lengthプロパティは、Dom\ProcessingInstructionオブジェクトが表現する処理命令ノードの、データ部分の文字数を保持するプロパティです。』 処理命令ノードとは、XMLやHTML文書内において <??> で囲まれた、特定のアプリケーションへの指示を表す部分のことです。このノードは、命令の対象を示す「ターゲット」と、その具体的な内容である「データ」の2つの主要な部分から構成されます。例えば、<?php echo 'test'; ?> という処理命令の場合、phpがターゲットとなり、それに続く echo 'test'; がデータ部分にあたります。lengthプロパティは、このデータ部分の文字列の長さを整数値として返します。このプロパティの値は読み取り専用であり、プロパティに値を代入してデータ部分の長さを変更することはできません。処理命令ノードのデータ部分がどれくらいの長さを持つかを確認したい場合に、このプロパティを参照します。

構文(syntax)

1<?php
2
3$doc = new DOMDocument();
4
5// 処理命令ノードを作成します (ターゲット: 'php-app', データ: 'action="shutdown"')
6$pi = $doc->createProcessingInstruction('php-app', 'action="shutdown"');
7
8// length プロパティは、データ部分の文字数を返します。
9// 'action="shutdown"' は 17 文字です。
10echo $pi->length;
11
12?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

Dom\ProcessingInstruction::length は、処理命令の文字列表現の長さを整数で返します。

サンプルコード

PHP Dom\ProcessingInstructionのlengthで文字列長を取得する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * Dom\ProcessingInstruction->length プロパティの使用例を示します。
7 *
8 * このプロパティは、XML処理命令(Processing Instruction)のデータ部分の
9 * 文字列の長さを取得します。
10 */
11function demonstrateProcessingInstructionLength(): void
12{
13    // 処理命令 `<?php-style "display-errors"?>` を含むXML文字列を定義します。
14    // この命令のデータ部分は `"display-errors"` です。
15    $xmlString = <<<XML
16<?xml version="1.0" encoding="UTF-8"?>
17<?php-style "display-errors"?>
18<document>
19  <content>some text</content>
20</document>
21XML;
22
23    // DOMDocumentオブジェクトを作成し、XMLを読み込みます。
24    $dom = new DOMDocument();
25    $dom->loadXML($xmlString);
26
27    // ドキュメント内のノードを走査し、処理命令を探します。
28    foreach ($dom->childNodes as $node) {
29        // ノードが処理命令(ProcessingInstruction)のインスタンスであるかを確認します。
30        // PHP 8以降、DOM関連クラスは `Dom` 名前空間に属します。
31        if ($node instanceof \Dom\ProcessingInstruction) {
32            // $node->data は処理命令のデータ文字列 (`"display-errors"`) を保持します。
33            $dataString = $node->data;
34
35            // $node->length プロパティは、データ文字列のバイト単位の長さを返します。
36            $length = $node->length;
37
38            echo "処理命令のターゲット: " . $node->target . PHP_EOL;
39            echo "データ文字列: " . $dataString . PHP_EOL;
40            echo "データの長さ (length プロパティ): " . $length . PHP_EOL;
41
42            // 最初の処理命令を見つけたらループを終了します。
43            break;
44        }
45    }
46}
47
48// 関数を実行して結果を表示します。
49demonstrateProcessingInstructionLength();

PHPの Dom\ProcessingInstruction->length は、XMLの処理命令(Processing Instruction)が持つデータ部分の文字列の長さを取得するためのプロパティです。このプロパティは引数を受け取らず、戻り値としてデータ部分の長さを整数(int)で返します。

サンプルコードでは、まず <?php-style "display-errors"?> という処理命令を含むXML文字列を定義しています。この命令において、"display-errors" がデータ部分に該当します。次に、DOMDocument クラスを使ってこのXMLを解析し、ノードを一つずつ調べて処理命令のノード(Dom\ProcessingInstruction オブジェクト)を見つけます。

取得した処理命令ノードの length プロパティにアクセスすると、データ部分である "display-errors" という文字列の長さが取得できます。この場合、結果として整数 16 が返されます。length プロパティは、PHPの strlen() 関数のように、文字列のバイト単位の長さを計算します。このように、XML文書に含まれる処理命令のデータ部分のサイズを簡単に確認したい場合に便利なプロパティです。

Dom\ProcessingInstruction->lengthプロパティは、処理命令のデータ部分の長さを返しますが、これは文字数ではなくバイト数である点に注意が必要です。日本語のようなマルチバイト文字をデータに含む場合、見た目の文字数とlengthの値は一致しません。この挙動はPHPのstrlen()関数と同じです。また、PHP 8以降、DOM関連のクラスはDom名前空間に属するため、instanceof \Dom\ProcessingInstructionのように完全修飾名で型をチェックする必要があります。このlengthプロパティは、$node->dataで取得できる文字列のバイト長と同じ値であり、対象の処理命令がXML内に存在しない場合は、このプロパティにアクセスする処理は実行されません。

PHPで配列の要素数を取得する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * 配列の要素数(長さ)を取得して表示します。
7 *
8 * PHPで配列の要素数を取得するには、一般的にcount()関数を使用します。
9 * これは、多くの言語で使われる `length` プロパティやメソッドに相当する機能です。
10 *
11 * @param array<int, mixed> $targetArray 要素数を調べたい配列
12 * @return void
13 */
14function printArrayLength(array $targetArray): void
15{
16    // count()関数で配列の要素数を取得
17    $length = count($targetArray);
18
19    // 結果を出力
20    echo "配列の要素数は " . $length . " です。" . PHP_EOL;
21}
22
23// サンプル用の配列を準備
24$fruits = ['Apple', 'Banana', 'Cherry'];
25printArrayLength($fruits);
26
27// 空の配列の場合
28$emptyArray = [];
29printArrayLength($emptyArray);

このサンプルコードは、PHPで配列に含まれる要素の数を取得し、その結果を表示する方法を示しています。

PHPでは、配列の要素数を数えるために count() という標準関数を使用するのが一般的です。これは、他の多くのプログラミング言語で配列の長さを取得する際に用いられる length プロパティやメソッドと同じ役割を果たします。

コード内で定義されている printArrayLength 関数は、要素数を調べたい配列を引数 targetArray として受け取ります。この関数は、計算した値を返すのではなく画面に文字列を出力する処理のみを行うため、戻り値の型は void(何もないという意味)と宣言されています。

関数の内部では、count() 関数に引数の配列を渡して要素数を取得し、その数値を echo を使ってメッセージと共に画面へ出力します。

最後に、3つの要素を持つ配列 $fruits と、中身が空の配列 $emptyArray をそれぞれ引数として関数を呼び出し、要素がある場合とない場合のどちらでも正しく要素数が表示されることを確認しています。

PHPの配列には、他のプログラミング言語でよく見られる length というプロパティは存在しません。そのため 配列->length のように記述しても要素数を取得できず、エラーとなる点に注意が必要です。サンプルコードのように、PHPで配列の要素数を取得するには、専用の count() 関数を使用するのが標準的な方法です。この関数は、空の配列に対しては正しく 0 を返します。なお、リファレンス情報にある Dom\ProcessingInstructionlength は、XMLなどを扱うDOMオブジェクト用のプロパティであり、ここで扱う一般的な配列とは異なるものです。

関連コンテンツ

関連プログラミング言語