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

【PHP8.x】DOMProcessingInstruction::isSupported()メソッドの使い方

isSupportedメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

isSupportedメソッドは、特定のDOM機能がその処理命令ノードでサポートされているかどうかを判定するために使用されるメソッドです。このメソッドは、親クラスであるDOMNodeから継承されています。第一引数に機能名、第二引数にそのバージョン番号を文字列で指定することで、その機能が現在のDOM実装で利用可能かを確認します。例えば、"XML"という機能のバージョン"1.0"がサポートされているかをチェックする場合などに用います。理論上は、機能がサポートされていればtrueを、されていなければfalseを返します。しかし、PHPのDOM拡張機能における重要な注意点として、このメソッドは引数の内容に関わらず常にfalseを返す仕様になっています。これは、PHPのDOM実装がW3Cの仕様に完全準拠しているわけではなく、内部的にlibxml2ライブラリに基づいているためです。DOM仕様との互換性のためにメソッドは存在しますが、PHP環境下では機能のサポート状況をこのメソッドで判定することはできません。そのため、実際の開発でこのメソッドの返り値に依存した処理を記述することは避けるべきです。

構文(syntax)

1<?php
2
3$dom = new DOMDocument('1.0', 'UTF-8');
4$instruction = $dom->createProcessingInstruction('php', 'echo "Hello!";');
5
6$feature = 'XML';
7$version = '1.0';
8
9$is_supported = $instruction->isSupported($feature, $version);
10
11var_dump($is_supported);
12
13?>

引数(parameters)

string $feature, string $version

  • string $feature: サポートされている機能の名前を指定する文字列
  • string $version: サポートされている機能のバージョンを指定する文字列

戻り値(return)

bool

このメソッドは、現在のDOMProcessingInstructionがサポートされているかどうかを示す真偽値(bool)を返します。サポートされている場合は true、そうでない場合は false です。

サンプルコード

PHP DOMProcessingInstruction::isSupported() で機能サポートを確認する

1<?php
2
3/**
4 * DOMProcessingInstruction::isSupported() メソッドの使用例
5 *
6 * このメソッドは、DOM実装が特定の機能とバージョンをサポートしているかを確認します。
7 * 例えば、XML処理において特定のDOM仕様レベル(Core, XMLなど)が利用可能かを知りたい場合に役立ちます。
8 * 戻り値は bool 型で、サポートしていれば true、していなければ false を返します。
9 */
10
11// 1. DOMDocumentオブジェクトを作成します。
12//    DOMProcessingInstructionオブジェクトは、通常DOMDocumentを通じて生成されます。
13$dom = new DOMDocument('1.0', 'UTF-8');
14
15// 2. DOMDocumentからDOMProcessingInstructionオブジェクトを生成します。
16//    ここでは、「php」というターゲットと「echo 'Hello!';」というデータを持つ処理命令を作成します。
17$processingInstruction = $dom->createProcessingInstruction('php', 'echo \'Hello!\';');
18
19// 3. isSupported() メソッドを使って、特定のDOM機能のサポート状況を確認します。
20//    第1引数には機能名(例: "Core", "XML")、第2引数にはバージョン(例: "1.0", "2.0")を渡します。
21
22echo "現在のDOM実装における機能サポート状況の確認:\n\n";
23
24// 例1: DOM Core Level 2.0 がサポートされているかを確認します。
25$featureCore = "Core";
26$versionCore = "2.0";
27if ($processingInstruction->isSupported($featureCore, $versionCore)) {
28    echo "  機能 '{$featureCore}' バージョン '{$versionCore}' はサポートされています。\n";
29} else {
30    echo "  機能 '{$featureCore}' バージョン '{$versionCore}' はサポートされていません。\n";
31}
32
33// 例2: DOM XML Level 1.0 がサポートされているかを確認します。
34$featureXml = "XML";
35$versionXml = "1.0";
36if ($processingInstruction->isSupported($featureXml, $versionXml)) {
37    echo "  機能 '{$featureXml}' バージョン '{$versionXml}' はサポートされています。\n";
38} else {
39    echo "  機能 '{$featureXml}' バージョン '{$versionXml}' はサポートされていません。\n";
40}
41
42// 例3: 存在しない、または一般的でない機能のサポート状況を確認します。
43$featureNonStandard = "MyCustomFeature";
44$versionNonStandard = "1.0";
45if ($processingInstruction->isSupported($featureNonStandard, $versionNonStandard)) {
46    echo "  機能 '{$featureNonStandard}' バージョン '{$versionNonStandard}' はサポートされています。\n";
47} else {
48    echo "  機能 '{$featureNonStandard}' バージョン '{$versionNonStandard}' はサポートされていません。\n";
49}
50
51?>

PHPのDOMProcessingInstruction::isSupported()メソッドは、現在利用しているDOM(Document Object Model)の実装が、特定の機能とそのバージョンをサポートしているかどうかを確認するために使用されます。この機能は、XML文書などを扱う際に、特定のDOM仕様レベル(例えば、DOM CoreやDOM XMLといった標準的な機能セット)が現在の実行環境で利用可能かを知りたい場合に役立ちます。

このメソッドは二つの引数を取ります。第一引数には、確認したい機能の名前を文字列(string $feature)で指定します。例えば「Core」や「XML」といった文字列です。第二引数には、その機能のバージョンを文字列(string $version)で指定します。例えば「1.0」や「2.0」といった文字列です。メソッドの戻り値はbool型で、指定された機能とバージョンがサポートされていればtrueを、サポートされていなければfalseを返します。

サンプルコードでは、まずDOMDocumentDOMProcessingInstructionオブジェクトを作成しています。その後、isSupported()メソッドを使って、DOM Core Level 2.0やDOM XML Level 1.0、そして存在しない可能性のある「MyCustomFeature」など、複数の機能とバージョンのサポート状況を順に確認し、その結果を出力しています。これにより、開発者は自身のアプリケーションが依存するDOM機能が、実行環境で適切に提供されているかを確認することができます。

このメソッドは、DOMProcessingInstructionオブジェクトを介して、PHPのDOM拡張機能が特定のDOM仕様(例: Core, XML)とそのバージョンをサポートしているかを確認します。引数$feature$versionには、DOMの標準的な機能名とバージョン文字列(例: "Core", "2.0")を指定する必要があり、PHPのバージョンや任意の文字列を渡すわけではない点に注意してください。この機能は、DOMの高度な操作や、異なるDOM実装間での互換性を確認する際に利用されることが多く、一般的なWebアプリケーション開発で頻繁に使用されることは稀であることを理解しておくと良いでしょう。戻り値の真偽値は、該当機能が現在のDOM環境で利用可能かを示します。

PHP DOM処理命令のサポート状況を確認する

1<?php
2
3/**
4 * DOMProcessingInstruction::isSupported() メソッドの使用例をデモンストレーションします。
5 *
6 * このコードは、システムエンジニアを目指す初心者向けに、
7 * DOM (Document Object Model) の処理命令ノードが、特定の機能とバージョンを
8 * ドキュメントがサポートしているかを確認する方法を示します。
9 * キーワード「php supported versions」に関連して、PHPのDOM実装が
10 * XMLの特定のDOM機能(例: Core, XML)のどのバージョンをサポートしているかを示す例となります。
11 */
12function demonstrateDomProcessingInstructionIsSupported(): void
13{
14    echo "DOMProcessingInstruction::isSupported() メソッドのデモンストレーション:\n\n";
15
16    // 1. 新しいDOMDocumentオブジェクトを作成します。
17    //    これはXMLドキュメント全体を表します。
18    $dom = new DOMDocument('1.0', 'UTF-8');
19    $dom->formatOutput = true; // 出力を整形して読みやすくします。
20
21    // 2. ルート要素を作成し、ドキュメントに追加します。
22    //    処理命令がどこに挿入されても動作しますが、一般的なXML構造を作成します。
23    $root = $dom->createElement('root');
24    $dom->appendChild($root);
25
26    // 3. DOMProcessingInstruction(処理命令)ノードを作成します。
27    //    XMLの `<?target data?>` 形式のノードです。
28    //    ここではターゲットを 'php'、データを 'version="8.0"' とします。
29    $processingInstruction = $dom->createProcessingInstruction('php', 'version="8.0"');
30
31    // 4. 作成した処理命令ノードをドキュメントに追加します。
32    //    isSupportedメソッドは、ノードが属するドキュメントのサポート状況をテストするため、
33    //    ノードがDOMDocumentオブジェクトに属している必要があります。
34    $dom->insertBefore($processingInstruction, $dom->firstChild);
35
36    echo "--- 処理命令ノード情報 ---\n";
37    echo "ノード名: " . $processingInstruction->nodeName . "\n";
38    echo "ターゲット: " . $processingInstruction->target . "\n";
39    echo "データ: " . $processingInstruction->data . "\n\n";
40
41    // 5. isSupported() メソッドを使用して、異なるDOM機能とそのバージョンが
42    //    現在のPHPのDOM実装(およびXMLドキュメント)によってサポートされているかを確認します。
43    //    PHPのDOM拡張は通常、DOM Level 2および3の主要な機能をサポートしています。
44
45    echo "--- DOM機能サポート状況の確認 ---\n";
46
47    // DOM Core Level 2.0 のサポート確認
48    // 'Core' はDOMの基本機能、'2.0' はDOM Level 2のバージョンを示します。
49    $featureCore2 = 'Core';
50    $versionCore2 = '2.0';
51    $isCore2Supported = $processingInstruction->isSupported($featureCore2, $versionCore2);
52    echo "機能 '{$featureCore2}' バージョン '{$versionCore2}' のサポート: "
53        . ($isCore2Supported ? "はい" : "いいえ") . "\n";
54
55    // DOM XML Level 2.0 のサポート確認
56    // 'XML' はXML固有の機能、'2.0' はDOM Level 2のバージョンを示します。
57    $featureXml2 = 'XML';
58    $versionXml2 = '2.0';
59    $isXml2Supported = $processingInstruction->isSupported($featureXml2, $versionXml2);
60    echo "機能 '{$featureXml2}' バージョン '{$versionXml2}' のサポート: "
61        . ($isXml2Supported ? "はい" : "いいえ") . "\n";
62
63    // DOM Core Level 3.0 のサポート確認
64    // 'Core' のDOM Level 3バージョンです。
65    $featureCore3 = 'Core';
66    $versionCore3 = '3.0';
67    $isCore3Supported = $processingInstruction->isSupported($featureCore3, $versionCore3);
68    echo "機能 '{$featureCore3}' バージョン '{$versionCore3}' のサポート: "
69        . ($isCore3Supported ? "はい" : "いいえ") . "\n";
70
71    // 未知の機能のサポート確認
72    // 存在しない、または現在の実装でサポートされていない機能は 'いいえ' となります。
73    $featureUnknown = 'NonExistentFeature';
74    $versionUnknown = '1.0';
75    $isUnknownSupported = $processingInstruction->isSupported($featureUnknown, $versionUnknown);
76    echo "機能 '{$featureUnknown}' バージョン '{$versionUnknown}' のサポート: "
77        . ($isUnknownSupported ? "はい" : "いいえ") . "\n";
78}
79
80// 上記で定義した関数を実行し、デモンストレーションを開始します。
81demonstrateDomProcessingInstructionIsSupported();
82
83?>

DOMProcessingInstruction::isSupported()メソッドは、XMLドキュメント内で使用される処理命令ノード(<?target data?>のような形式)が、特定のDOM(Document Object Model)機能とそのバージョンを、現在のPHPのDOM実装がサポートしているかを確認するために利用されます。

このメソッドは、2つの文字列引数を受け取ります。最初の引数$featureには確認したいDOM機能の名前を渡します。例えば、DOMの基本的な機能群を表す「Core」や、XML固有の機能を表す「XML」などです。2番目の引数$versionには、その機能のバージョンを指定します。これは通常、「2.0」や「3.0」といった形式で、DOMの仕様レベルを示します。

メソッドの実行結果はブール値(bool)で返されます。指定された機能とバージョンがPHPのDOM実装によってサポートされている場合はtrueが、そうでない場合はfalseが返されます。この機能を使うことで、PHPのDOM拡張がXMLの特定の標準機能(例:DOM Level 2や3の主要機能)をどの程度サポートしているかを動的に確認できるため、異なるDOMバージョンに依存するコードの互換性を判断する際に役立ちます。

DOMProcessingInstruction::isSupportedメソッドは、個々の処理命令ノード自体ではなく、そのノードが属するDOMDocument(XMLドキュメント全体)が、W3Cによって定義されたDOM標準の特定機能とバージョンをサポートしているかを確認します。そのため、ノードをドキュメントに挿入してからこのメソッドを呼び出す必要があります。引数の$featureは「Core」や「XML」といったDOM標準の機能カテゴリを、$versionは「2.0」や「3.0」といったDOMレベルのバージョンを指します。これらはPHPのバージョンや、XML処理命令のターゲット(例: <?php ...?>)とは直接関係ありませんので注意してください。この機能は、さまざまなDOM実装間での互換性を確認し、より堅牢なXML処理コードを作成するために利用されます。

関連コンテンツ

関連プログラミング言語