Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】DOMDocument::formatOutputプロパティの使い方

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

作成日: 更新日:

基本的な使い方

formatOutputプロパティは、DOMDocumentオブジェクトが生成するXMLやHTMLの出力形式を制御するための設定値を保持するプロパティです。このプロパティにtrue(真)を設定すると、DOMDocumentオブジェクトからXMLやHTMLを出力する際に、人間が読みやすいように自動的にインデント(字下げ)や改行が追加され、きれいに整形されて出力されます。例えば、ウェブページの内容を構成するHTMLや、データ交換に使われるXMLをファイルに保存したり、変数に文字列として取得したりする際に、構造が視覚的にわかりやすくなります。

一方、formatOutputプロパティをfalse(偽)に設定した場合(これがデフォルト値です)は、インデントや余分な改行が加えられずに、要素が詰めて出力されます。これにより、出力されるファイルや文字列のサイズを最小限に抑えることができ、ネットワーク転送の効率化やストレージの節約に貢献します。

この設定は、DOMDocumentオブジェクトのsave()メソッドでファイルに保存する場合や、saveXML()メソッドでXMLデータを文字列として取得する場合など、出力を行うメソッドに影響を与えます。開発中に構造を確認したい時や、読みやすい形式でデバッグを行いたい場合にはtrueに設定すると非常に便利ですが、本番環境でパフォーマンスを重視したり、プログラムによる厳密なパースが目的の場合には、通常falseのまま使用することが推奨されます。PHP 8においても、このプロパティの基本的な挙動に変更はありません。

構文(syntax)

1<?php
2$dom = new DOMDocument();
3$dom->formatOutput = true;
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

DOMDocument オブジェクトの整形出力を有効にするか無効にするかを示す真偽値を返します。

サンプルコード

PHP DOMDocument::formatOutput でXML整形する

1<?php
2
3/**
4 * DOMDocument::formatOutput プロパティの使用例を示します。
5 *
6 * この関数は、簡単なXML構造を作成し、DOMDocument::formatOutput プロパティを
7 * 使用して、生成されるXMLが出力時に整形(インデントと改行)されるようにします。
8 */
9function generateFormattedXmlDocument(): void
10{
11    // 新しい DOMDocument インスタンスを作成します。
12    // XMLのバージョンとエンコーディングを指定します。
13    $dom = new DOMDocument('1.0', 'UTF-8');
14
15    // formatOutput プロパティを true に設定します。
16    // これにより、XML出力時に自動的にインデントと改行が追加され、
17    // 整形された読みやすい形式で出力されます。
18    // デフォルトは false で、その場合XMLは整形されずに一行で出力されることがあります。
19    $dom->formatOutput = true;
20
21    // XMLドキュメントのルート要素を作成し、DOMにA追加します。
22    $rootElement = $dom->createElement('data');
23    $dom->appendChild($rootElement);
24
25    // 最初のアイテム要素を作成し、内容と属性を設定します。
26    $item1 = $dom->createElement('item', 'これは最初のアイテムです。');
27    $item1->setAttribute('id', 'A001');
28    $rootElement->appendChild($item1);
29
30    // 2番目のアイテム要素を作成し、ネストされた要素を追加します。
31    $item2 = $dom->createElement('item');
32    $item2->setAttribute('id', 'B002');
33    $rootElement->appendChild($item2);
34
35    $subItem = $dom->createElement('detail', '詳細情報がここに入ります。');
36    $item2->appendChild($subItem);
37
38    // DOMDocumentの内容をXML文字列として保存し、出力します。
39    // formatOutput が true に設定されているため、出力は整形されます。
40    echo $dom->saveXML();
41}
42
43// 関数を実行し、整形されたXMLを生成・出力します。
44generateFormattedXmlDocument();
45
46?>

PHPのDOMDocument::formatOutputプロパティは、DOMDocumentクラスでXMLドキュメントを生成する際に、その出力形式を制御するためのものです。このプロパティにはbool型(真偽値)を設定します。

サンプルコードでは、新しいDOMDocumentインスタンスを作成した後、$dom->formatOutput = true;と設定しています。これにより、XMLドキュメントを文字列として出力する際(例えばsaveXML()メソッドを使う場合)、自動的に適切なインデントと改行が追加され、XMLの階層構造が視覚的にわかりやすく、人間にとって読みやすい整形された形式で出力されるようになります。

もしformatOutputfalseに設定するか、何も設定しない場合(デフォルト値はfalseです)、XMLは整形されずに、要素が一行に詰め込まれたり、インデントがされなかったりするため、内容を読み解くのが難しくなることがあります。

このプロパティは引数を取らず、trueを設定することでXMLを整形して出力し、falseを設定することで整形しないXMLを出力するという挙動を制御します。デバッグ時や、生成したXMLを他のシステムではなく人間が確認する必要がある場合に、特に役立つ機能です。サンプルコードの最後にecho $dom->saveXML();を実行すると、この設定に基づいて整形されたXMLが出力される様子を確認できます。

DOMDocument::formatOutputプロパティは、XMLを人間が読みやすいように整形して出力するために使用されます。このプロパティのデフォルト値はfalseであるため、整形されたXML出力を得るには明示的にtrueに設定する必要があります。trueにすると、saveXML()などのメソッドで出力されるXMLに自動的にインデントや改行が追加され、デバッグや内容確認が格段に容易になります。

ただし、このプロパティはXMLの見た目を整えるだけで、内部のDOM構造やデータそのものには影響を与えません。システム間でXMLデータを交換する場合など、機械がXMLを処理することを目的としている場合は、不要なインデントや改行はデータ量をわずかに増やし、ごくまれにパース処理に影響を与える可能性もあるため、通常はfalseのまま運用するか、設定しないことが推奨されます。用途に応じて適切に設定しましょう。

PHP DOMDocument::formatOutput を使う

1<?php
2
3/**
4 * DOMDocument::formatOutput プロパティの使用例を示します。
5 *
6 * このプロパティは、DOMDocument オブジェクトが XML/HTML を保存または出力する際に、
7 * 読みやすいように整形(インデントや改行を追加)するかどうかを制御します。
8 * システムエンジニアを目指す初心者の方にも、整形前後の出力の違いを通じて
9 * その効果を理解できるよう、簡潔なXML構造で例を示します。
10 *
11 * @return void
12 */
13function demonstrateDomFormatOutput(): void
14{
15    // 1. 新しいDOMDocumentオブジェクトを作成します。
16    //    '1.0' はXMLバージョン、'UTF-8' はエンコーディングを指定します。
17    $dom = new DOMDocument('1.0', 'UTF-8');
18
19    // 2. XML構造を構築します。
20    //    ルート要素 '<root>' を作成し、ドキュメントに追加します。
21    $root = $dom->createElement('root');
22    $dom->appendChild($root);
23
24    //    子要素 '<item>' をいくつか作成し、ルート要素に追加します。
25    $item1 = $dom->createElement('item', 'Value A');
26    $root->appendChild($item1);
27
28    $item2 = $dom->createElement('item', 'Value B');
29    $root->appendChild($item2);
30
31    //    さらにネストされた要素 '<parent><child>' を作成し、ルート要素に追加します。
32    $parent = $dom->createElement('parent');
33    $root->appendChild($parent);
34    $child = $dom->createElement('child', 'Nested Value');
35    $parent->appendChild($child);
36
37    // 3. formatOutput が false (デフォルト値) の場合の出力を確認します。
38    echo "--- formatOutput が false (デフォルト) の場合 ---\n";
39    //    formatOutput はデフォルトで false なので、明示的に設定して整形されないXMLを出力します。
40    //    通常、インデントや改行なしの、1行または非常に短い行に収まる出力になります。
41    $dom->formatOutput = false;
42    echo $dom->saveXML() . "\n\n";
43
44    // 4. formatOutput を true に設定した場合の出力を確認します。
45    echo "--- formatOutput が true の場合 ---\n";
46    //    formatOutput を true に設定すると、DOMDocument は出力時にXMLを整形します。
47    //    これにより、インデントや改行が自動的に追加され、XMLの可読性が向上します。
48    $dom->formatOutput = true;
49    echo $dom->saveXML() . "\n";
50}
51
52// 作成した関数を実行し、DOMDocument::formatOutput プロパティの動作を確認します。
53demonstrateDomFormatOutput();
54
55?>

DOMDocument::formatOutputプロパティは、PHPのDOM拡張機能におけるDOMDocumentクラスが、XMLやHTMLをファイルに保存したり、文字列として出力したりする際の整形方法を制御します。このプロパティはbool型の値を設定することで、その挙動を変更します。trueに設定すると、出力されるXML/HTMLには自動的に適切なインデントや改行が追加され、人間が読みやすい形式になります。これにより、複雑な構造を持つドキュメントでも内容を把握しやすくなります。

一方、デフォルト値であるfalseの場合は、要素が詰めて出力され、インデントや改行は付加されません。これはファイルサイズを最小限に抑えたい場合や、機械による処理に適したコンパクトな形式が必要な場合に有用です。

サンプルコードでは、同一のXML構造を持つDOMDocumentオブジェクトに対して、このプロパティをfalsetrueに切り替えてsaveXML()メソッドで出力しています。この比較を通じて、システムエンジニアを目指す初心者の方でも、出力結果の可読性がどのように変わるかを具体的に理解できるでしょう。

DOMDocument::formatOutputプロパティは、XMLやHTMLの出力時に、読みやすくするためのインデントや改行を自動的に追加するかどうかを制御します。このプロパティのデフォルト値はfalseで、出力は整形されず一行にまとめられます。これをtrueに設定すると、saveXML()などのメソッドで出力されるXML/HTMLが自動的に整形され、コードの可読性が大幅に向上します。

開発現場では、デバッグ目的でXML構造を確認したい場合や、人間が直接編集する設定ファイルなどを出力する際にはtrueに設定すると便利です。しかし、機械的な処理が主でファイルサイズやパフォーマンスが重要な場合は、不要な整形を行わないfalseのままで利用することが一般的です。用途に応じて適切に使い分けることが重要です。

関連コンテンツ

関連プログラミング言語