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

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

作成日: 更新日:

基本的な使い方

configプロパティは、DOMDocumentオブジェクトの動作を制御するための様々な設定オプションを保持するプロパティです。このプロパティは、XMLやHTMLドキュメントの解析、操作、そして出力に関する詳細な挙動をカスタマイズする際に利用されます。具体的には、ドキュメントの読み込み時に外部エンティティを解決するかどうか、DTD(Document Type Definition)に基づいて検証を行うか、あるいは空白文字を保持するかどうかといった解析オプションを管理できます。また、ドキュメントを文字列として出力する際の整形(インデントや改行の有無)やエンコーディング指定といった出力に関する設定も含まれる可能性があります。

システムエンジニアを目指す初心者の方にとって、このconfigプロパティは、DOMDocumentの複雑な挙動を一つの場所でまとめて設定できる便利な手段となります。例えば、XMLファイルを読み込む際にエラーチェックを厳しくしたり、出力するHTMLを人間が読みやすいように整形したりする際に、個別のプロパティやメソッドの引数を都度指定する代わりに、configプロパティを通じて一元的に設定を調整できるでしょう。これにより、コードの可読性が向上し、ドキュメント処理の柔軟性が高まります。通常、このプロパティは連想配列や設定オブジェクトとして機能し、キーと値のペアでそれぞれの設定項目を保持すると考えられます。

構文(syntax)

1<?php
2$dom = new DOMDocument();
3$configValue = $dom->config;

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP DOMDocument設定入門

1<?php
2
3/**
4 * DOMDocumentの設定例を示す関数。
5 *
6 * リファレンス情報にある DOMDocument::$config プロパティは、
7 * PHP 8では存在しません(PHP 5.2.0で削除されました)。
8 * 代わりに、DOMDocumentのインスタンスが持つ他のプロパティを通じて、
9 * ドキュメントの動作や出力形式を設定することができます。
10 * この例では、XML出力の整形と空白文字の保持に関する設定を示します。
11 * これらは「php configure」というキーワードに関連する、DOMDocumentの一般的な設定方法です。
12 */
13function demonstrateDomDocumentConfiguration(): void
14{
15    // 新しいDOMDocumentインスタンスを作成
16    $dom = new DOMDocument('1.0', 'UTF-8');
17
18    // DOMDocument::$config プロパティはPHP 8では利用できません。
19    // PHP 8でDOMDocumentの設定を行うには、以下のような既存のプロパティを使用します。
20
21    // 1. formatOutputプロパティ: XML出力の整形を設定します。
22    //    trueに設定すると、saveXML()などの出力時にインデントと改行が自動的に追加され、
23    //    XMLが読みやすくなります。
24    //    このプロパティへの代入は戻り値を持ちません。
25    $dom->formatOutput = true;
26    echo "formatOutputを " . ($dom->formatOutput ? "有効" : "無効") . " に設定しました。\n";
27
28    // 2. preserveWhiteSpaceプロパティ: XML/HTML読み込み時に空白文字を保持するかどうかを制御します。
29    //    falseに設定すると、テキストノード内の余分な空白文字が削除されることがあります。
30    //    主にDOMツリー構築時の振る舞いに影響を与えます。
31    //    このプロパティへの代入は戻り値を持ちません。
32    $dom->preserveWhiteSpace = false;
33    echo "preserveWhiteSpaceを " . ($dom->preserveWhiteSpace ? "有効" : "無効") . " に設定しました。\n";
34
35    // ドキュメントに要素を追加して設定の影響を確認します。
36    $root = $dom->createElement('root');
37    $dom->appendChild($root);
38    $child = $dom->createElement('child', '  Hello   World  ');
39    $root->appendChild($child);
40
41    echo "\n--- formatOutput 設定適用後のXML出力例 ---\n";
42    // formatOutput=true のため、出力が整形されます。
43    // preserveWhiteSpace=false は、主にloadXML/loadHTML時に空白を圧縮しますが、
44    // createElementで作成されたノードのtextContentはそのまま保持されます。
45    echo $dom->saveXML();
46
47    // preserveWhiteSpaceがロード時に与える影響のより明確な例
48    $xmlStringWithSpaces = '<data><item>  Value with   many    spaces  </item></data>';
49
50    echo "\n--- preserveWhiteSpace のロード時の影響 --- \n";
51
52    // preserveWhiteSpaceがfalseの場合 (デフォルトはtrueです)
53    $domLoadNoWS = new DOMDocument();
54    $domLoadNoWS->preserveWhiteSpace = false; // 空白を削除する設定
55    $domLoadNoWS->loadXML($xmlStringWithSpaces);
56    $itemNodeNoWS = $domLoadNoWS->getElementsByTagName('item')->item(0);
57    // ロード時に空白が圧縮されていることを確認
58    echo "preserveWhiteSpace = false でロード: '" . $itemNodeNoWS->textContent . "'\n";
59
60    // preserveWhiteSpaceがtrueの場合
61    $domLoadWithWS = new DOMDocument();
62    $domLoadWithWS->preserveWhiteSpace = true; // 空白を保持する設定
63    $domLoadWithWS->loadXML($xmlStringWithSpaces);
64    $itemNodeWithWS = $domLoadWithWS->getElementsByTagName('item')->item(0);
65    // ロード時に空白が保持されていることを確認
66    echo "preserveWhiteSpace = true でロード: '" . $itemNodeWithWS->textContent . "'\n";
67}
68
69// 関数を実行してDOMDocumentの設定デモンストレーションを開始
70demonstrateDomDocumentConfiguration();

このサンプルコードは、PHP 8でDOMDocumentの設定を行う方法を示しています。リファレンス情報にあるDOMDocument::$configプロパティは、PHP 8では利用できません(PHP 5.2.0で削除されました)。代わりに、DOMDocumentのインスタンスが持つ他のプロパティを通して、XMLドキュメントの動作や出力形式を制御します。これは「php configure」というキーワードが示す、DOMDocumentの一般的な設定に相当します。

サンプルコードでは、主に以下の2つのプロパティを設定しています。

  1. $dom->formatOutput: このプロパティにtrueを設定すると、saveXML()などのメソッドでXMLを出力する際に、自動的にインデントと改行が追加され、XMLが読みやすくなります。戻り値はありません。設定された値によってXMLの出力形式が整形されるかどうかが決まります。

  2. $dom->preserveWhiteSpace: このプロパティは、XMLやHTMLを読み込む際に、テキストノード内の空白文字(スペース、タブ、改行など)を保持するかどうかを制御します。falseを設定すると、読み込み時に余分な空白文字が削除されることがあります。主にloadXML()loadHTML()でDOMツリーを構築する際の挙動に影響を与えます。戻り値はありません。この設定により、読み込まれたドキュメントの空白文字の扱われ方が変わります。

これらのプロパティを設定することで、XMLドキュメントの生成や解析における整形方法や空白文字の扱いを柔軟に調整できます。

このサンプルコードが示すように、PHP 8ではDOMDocument::$configプロパティは存在しません。これは過去のPHPバージョン(PHP 5.2.0で削除)の情報であり、現在の環境では利用できない点にご注意ください。代わりに、DOMDocumentインスタンスのformatOutputpreserveWhiteSpaceといった他のプロパティを使用して、XMLの出力形式や読み込み時の空白文字の扱いなどを設定します。formatOutputはXML出力の視覚的な整形に、preserveWhiteSpaceはXML読み込み時のDOMツリーにおける空白の保持に影響を与えます。これらのプロパティの設定は、XMLのデータ構造や表示に大きな影響を与えるため、それぞれの挙動を理解した上で慎重に利用することが重要です。また、「php configure」というキーワードは、PHP自体のコンパイル設定ではなく、DOMDocumentの振る舞いを設定する文脈で使われています。

PHP DOMDocument::configでXML正規化設定

1<?php
2
3declare(strict_types=1);
4
5/**
6 * DOMDocumentのconfigプロパティの使用例を示します。
7 *
8 * DOMDocument::$configプロパティは、DOMConfigurationオブジェクトを返します。
9 * このオブジェクトを通じて、ドキュメントの正規化(c14n)や検証などの
10 * 挙動に関するパラメータを設定できます。
11 *
12 * このサンプルでは、XMLを正規化する際にコメントを除去する設定を適用します。
13 */
14function demonstrateDomDocumentConfig(): void
15{
16    // コメントを含むXML文字列を定義
17    $xmlString = <<<XML
18    <?xml version="1.0" encoding="UTF-8"?>
19    <!-- 書籍リストのサンプル -->
20    <books>
21        <book id="1">
22            <title>独習PHP</title>
23        </book>
24    </books>
25    XML;
26
27    // DOMDocumentオブジェクトを作成し、XMLを読み込む
28    $dom = new DOMDocument();
29    $dom->loadXML($xmlString);
30
31    // --- デフォルトの状態でXMLを正規化して出力 ---
32    echo "--- 設定変更前の正規化されたXML ---" . PHP_EOL;
33    // C14N()メソッドはXMLを正規化(Canonicalize)した文字列を返します。
34    // デフォルトではコメントは保持されます。
35    echo $dom->C14N();
36    echo PHP_EOL . PHP_EOL;
37
38    // --- configプロパティ経由で設定を変更 ---
39    // $configプロパティからDOMConfigurationオブジェクトを取得
40    $config = $dom->config;
41
42    // setParameterメソッドで設定を変更できるか確認
43    if ($config->canSetParameter('comments', false)) {
44        // 'comments'パラメータをfalseに設定し、正規化時にコメントを除去するようにする
45        $config->setParameter('comments', false);
46
47        echo "--- 設定変更後の正規化されたXML ---" . PHP_EOL;
48        // 再度、正規化されたXMLを出力し、コメントが除去されたことを確認
49        echo $dom->C14N();
50        echo PHP_EOL;
51    } else {
52        echo "この環境では'comments'パラメータを設定できません。" . PHP_EOL;
53    }
54}
55
56// 関数を実行
57demonstrateDomDocumentConfig();

PHP 8のDOMDocumentクラスの$configプロパティは、XMLドキュメントの処理挙動を設定するための入り口です。このプロパティに引数はなく、XML処理の設定を管理するDOMConfigurationオブジェクトを戻り値として返します。DOMConfigurationオブジェクトを用いることで、XMLの正規化(C14N)や検証など、ドキュメントの様々な動作をパラメータで細かく制御できます。

サンプルコードでは、コメントを含むXMLをDOMDocumentに読み込み、まずデフォルト設定ではコメントが残る正規化を行います。次に、$dom->configからDOMConfigurationオブジェクトを取得し、setParameter()メソッドで正規化時にコメントを除去する設定を適用しています。その後、再度正規化を行うと、コメントが取り除かれたXMLが出力され、このプロパティによるXML処理のカスタマイズの有用性が分かります。

DOMDocument::$configは、XMLドキュメントの挙動を詳細に制御するDOMConfigurationオブジェクトを取得するための「プロパティ」であり、関数ではありません。このプロパティから取得したDOMConfigurationオブジェクトのsetParameterメソッドを使用し、XMLの正規化(C14N)時にコメントを除去するなど、様々なパラメータを設定できます。ただし、設定を行う前にcanSetParameterでそのパラメータが現在の環境で設定可能かを確認することが重要です。設定変更後は、DOMDocumentC14N()メソッドなどを再度利用することで、変更が適用された結果が得られます。

関連コンテンツ

関連プログラミング言語

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