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

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

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

作成日: 更新日:

基本的な使い方

isConnectedプロパティは、DOMDocumentオブジェクトがライブ接続されているかどうかを示す読み取り専用のプロパティです。DOMDocumentは、XMLドキュメント全体を表すクラスであり、isConnectedプロパティを通じて、そのドキュメントが実際にネットワーク接続を介して取得されたものかどうかを知ることができます。具体的には、このプロパティは、DOMDocumentがload()loadHTML()などのメソッドを使って、リモートURLからロードされた場合にtrueを返します。ローカルファイルからロードされた場合や、文字列から直接生成された場合はfalseを返します。

システムエンジニアを目指す初心者の方にとって、このプロパティは、外部ソースから取得したXMLドキュメントを扱う際に、ドキュメントの出所を判断するために役立ちます。例えば、取得したドキュメントの内容に応じて処理を分岐させたい場合に、isConnectedプロパティの値を確認することで、安全な処理を行うことができます。もしtrueであれば、ネットワーク経由で取得したドキュメントであるため、セキュリティ上のリスクを考慮した処理を行う、といった判断が可能です。

isConnectedプロパティの値はブール型(trueまたはfalse)で返されます。したがって、if文などで簡単に条件分岐を行うことができます。このプロパティは、DOMDocumentオブジェクトの状態を簡単に確認できる便利な機能であり、XMLドキュメントを扱う上で重要な役割を果たします。

構文(syntax)

1DOMDocument::$isConnected;

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

このプロパティは、DOMDocumentオブジェクトが外部リソースに接続されているかどうかを真偽値(boolean)で返します。接続されていれば true、そうでなければ false です。

サンプルコード

DOMDocument::isConnected()でDOM接続状態を調べる

1<?php
2
3/**
4 * DOMノードの接続状態をチェックするDOMDocument::isConnected()の使用例。
5 *
6 * このメソッドは、DOMノードがDOMツリーに接続されているか(つまり、ドキュメントのどこかに属しているか)を
7 * ブール値で返します。
8 *
9 * 注意: このメソッドは、DOMツリーの内部的な接続状態を判断するものであり、
10 * ネットワーク接続(例: Paho MQTTクライアントの接続状態など)とは直接関係ありません。
11 */
12function demonstrateDomIsConnected(): void
13{
14    // 新しいDOMDocumentオブジェクトを作成
15    $dom = new DOMDocument('1.0', 'UTF-8');
16
17    // ドキュメントのルート要素を作成し、ドキュメントに追加
18    $rootElement = $dom->createElement('root');
19    $dom->appendChild($rootElement);
20
21    // 新しい要素を作成(まだドキュメントツリーには追加されていない)
22    $childElement = $dom->createElement('item');
23
24    echo "--- 最初のチェック ---" . PHP_EOL;
25    // childElementはまだドキュメントツリーに追加されていないため、isConnected()はfalseを返す
26    echo "要素 'item' は現在ドキュメントツリーに接続されていますか? "
27        . ($childElement->isConnected() ? 'はい' : 'いいえ') . PHP_EOL;
28
29    // childElementをルート要素の子として追加
30    $rootElement->appendChild($childElement);
31
32    echo PHP_EOL . "--- 要素をツリーに追加後 ---" . PHP_EOL;
33    // childElementがドキュメントツリーに追加されたため、isConnected()はtrueを返す
34    echo "要素 'item' は現在ドキュメントツリーに接続されていますか? "
35        . ($childElement->isConnected() ? 'はい' : 'いいえ') . PHP_EOL;
36
37    // ドキュメントツリーからchildElementを削除
38    $rootElement->removeChild($childElement);
39
40    echo PHP_EOL . "--- 要素をツリーから削除後 ---" . PHP_EOL;
41    // childElementがドキュメントツリーから削除されたため、isConnected()はfalseを返す
42    echo "要素 'item' は現在ドキュメントツリーに接続されていますか? "
43        . ($childElement->isConnected() ? 'はい' : 'いいえ') . PHP_EOL;
44}
45
46// 関数の実行
47demonstrateDomIsConnected();

PHP 8のDOMDocumentクラスで利用できるisConnected()メソッドは、特定のDOMノードが現在のDOMドキュメントツリーに属しているかどうかを判断するために使用されます。このメソッドは引数を必要とせず、ノードがドキュメントツリーの一部として接続されている場合にtrueを、そうでなければfalseをブール値として返します。

サンプルコードでは、まずDOMDocumentを作成し、ルート要素を追加します。作成したばかりのitem要素は、まだドキュメントツリーに追加されていないため、isConnected()を呼び出すとfalseが返されます。その後、item要素をルート要素の子としてドキュメントツリーに追加すると、isConnected()trueに変わります。さらに、ドキュメントツリーからitem要素を削除すると、isConnected()は再びfalseを返します。

このメソッドは、XMLやHTMLなどの文書構造内におけるノードの論理的な接続状態を確認するものです。MQTTクライアントの接続状態(例えば、Paho MQTTのisConnected()のようなネットワーク接続の状態)とは異なり、DOMツリー内部の結びつきを判定する点にご注意ください。

このDOMDocument::isConnected()メソッドは、DOMツリー内のノードが現在そのドキュメントに接続されているか(親要素を持っているか)を真偽値で判定します。特に注意すべきは、メソッド名から連想されがちなPaho MQTTのようなネットワーク接続の状態とは全く関係がない点です。これはXML/HTMLドキュメントの内部的な構造のつながりを見るもので、DOM操作によってノードがツリーに追加されるとtrueを、削除されるとfalseを返します。DOM要素のライフサイクルにおける接続状態を正確に把握する際に活用してください。

PHP DOMDocument isConnected() で接続状態を確認する

1<?php
2
3/**
4 * DOMDocument (実際には DOMNode クラスから継承) の isConnected メソッドの動作を示すサンプルです。
5 * このメソッドは、DOMノードがドキュメントツリー(DOMDocument)に接続されているか否かをチェックします。
6 *
7 * 「paho connection lost」というキーワードは通常、ネットワーク接続の喪失を指しますが、
8 * ここでは「接続状態の確認」という一般的な概念を示すために、DOMツリーへの論理的な接続の有無を扱います。
9 * DOMの文脈における「接続」は、ネットワーク接続とは異なることに注意してください。
10 *
11 * @return void
12 */
13function demonstrateDomConnectionStatus(): void
14{
15    echo "DOMDocument::isConnected() (DOMNodeから継承) のデモンストレーション:\n\n";
16
17    // 1. DOMDocument オブジェクトの作成
18    // DOMDocument インスタンス自体は、作成時点で常にドキュメントツリーに接続されていると見なされます。
19    // そのため、isConnected() は常に true を返します。
20    $dom = new DOMDocument('1.0', 'UTF-8');
21    echo "1. DOMDocument インスタンス作成後:\n";
22    echo "   DOMDocument は接続済みか: " . ($dom->isConnected() ? 'true' : 'false') . "\n\n";
23
24    // 2. DOMElement オブジェクトの作成(まだDOMDocumentには追加していません)
25    // この要素はまだどのドキュメントツリーにも属していないため、isConnected() は false を返します。
26    $element = $dom->createElement('exampleElement');
27    echo "2. DOMElement インスタンス作成後 (DOMDocumentに追加前):\n";
28    echo "   要素は接続済みか: " . ($element->isConnected() ? 'true' : 'false') . "\n";
29
30    // ここで、Pahoの「connection lost」というキーワードを抽象的に解釈し、
31    // DOM要素が期待するツリーに「接続されていない」状態として示します。
32    if (!$element->isConnected()) {
33        echo "   [状態]: この要素はまだDOMツリーに接続されていません。論理的な「接続なし」状態です。\n";
34        echo "   (これはMQTTなどのネットワーク接続の喪失とは異なりますが、内部的な接続状態の一例です。)\n";
35    }
36    echo "\n";
37
38    // 3. DOMElement を DOMDocument に追加します
39    // 要素がDOMDocumentに追加されたため、isConnected() は true を返すようになります。
40    $dom->appendChild($element);
41    echo "3. DOMElement を DOMDocument に追加後:\n";
42    echo "   要素は接続済みか: " . ($element->isConnected() ? 'true' : 'false') . "\n";
43}
44
45// サンプル関数を実行します。
46demonstrateDomConnectionStatus();

PHPのDOM操作で使われるDOMNodeクラス(DOMDocumentクラスも継承しています)には、isConnected()というメソッドがあります。このメソッドは、呼び出されたDOMノードが現在のドキュメントツリー(HTMLやXMLの構造)に論理的に接続されているかどうかを真偽値(trueまたはfalse)で確認します。引数は不要で、現在の接続状態を示すブール値を返します。

例えば、DOMDocumentのインスタンス自体は、作成された時点で常にツリーの根と見なされるため、isConnected()は常にtrueを返します。しかし、createElement()で新しく要素を作成しただけでは、まだどのドキュメントツリーにも追加されていないため、その要素のisConnected()falseとなります。これは、ネットワーク接続の喪失を示す「paho connection lost」という言葉とは異なりますが、DOMツリーにおける「接続されていない」状態を表しています。その後、appendChild()などのメソッドを使ってこの要素をドキュメントに追加すると、要素がツリーに組み込まれるため、isConnected()trueを返すようになります。このメソッドは、DOM要素が正しく配置されているかを確認する際に役立ちます。

isConnectedメソッドは、PHPのDOM操作において、特定のDOMノードがドキュメントツリーに「論理的に接続されているか」を確認するものです。これはMQTTなどの「paho connection lost」が示すようなネットワークの物理的な接続状態とは意味が全く異なりますので、混同しないよう注意が必要です。

新しくDOMDocumentオブジェクトを作成した場合、そのオブジェクト自体は作成された時点で常に接続状態(true)と判断されます。しかし、createElementなどで作成した新しい要素は、DOMDocumentのツリーにappendChildinsertBeforeなどのメソッドで追加されるまでは、接続されていない状態(false)となります。このメソッドは、要素がドキュメント全体の構造に属しているかどうかを判断するために利用できる点にご留意ください。

関連コンテンツ

関連IT用語

関連プログラミング言語