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

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

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

作成日: 更新日:

基本的な使い方

isSupportedメソッドは、指定された機能とバージョンが、現在のDOMノード、具体的にはDOMNotationインスタンスによってサポートされているかどうかを確認するために実行するメソッドです。これはDOMNodeクラスから継承されており、PHP 8のDOM拡張機能の一部として利用できます。

このメソッドは2つの文字列型の引数を受け取ります。最初の引数 $feature は確認したい機能の名前(例:「XML」、「Core」など)を、2番目の引数 $version はその機能のバージョン(例:「1.0」、「2.0」など)を指定します。これらの機能とバージョンがサポートされている場合、このメソッドはtrueを、そうでない場合はfalseをブール値で返します。

DOMNotationは、XMLドキュメントのDOCTYPE宣言内で定義される「記法」(NOTATION)を表す特殊なノードです。これは、外部の非XMLデータ形式を参照する際に利用されることがありますが、XMLのDOM仕様の古いバージョンで主に存在したため、現代のウェブ開発やXML処理では使用される機会が非常に限られています。

そのため、DOMNotationオブジェクトに対してisSupportedメソッドを呼び出した場合、ほとんどのケースでfalseが返される傾向にあります。このメソッドは通常、より一般的なDOMDocumentなどのノードに対して、XMLの特定の機能やバージョンのサポート状況を広範に確認するために利用されることが多いです。

構文(syntax)

1<?php
2$xml = <<<XML
3<?xml version="1.0"?>
4<!DOCTYPE root [
5  <!NOTATION mynotation PUBLIC "some_public_id">
6]>
7<root/>
8XML;
9
10$doc = new DOMDocument();
11$doc->loadXML($xml);
12
13$notation = $doc->doctype->notations->getNamedItem('mynotation');
14
15// bool isSupported(string $feature, string $version)
16$is_supported = $notation->isSupported('XML', '1.0');
17
18var_dump($is_supported);
19?>

引数(parameters)

string $feature, string $version

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

戻り値(return)

bool

このメソッドは、現在の環境で DOM 拡張機能がサポートされているかどうかを示す論理値 (true または false) を返します。

サンプルコード

PHP DOMNotation isSupportedで機能バージョンを確認する

1<?php
2
3/**
4 * DOMNotation::isSupported メソッドの使用例を示します。
5 * このメソッドは、特定のDOM機能(feature)とバージョン(version)が
6 * このDOM実装によってサポートされているかを確認します。
7 *
8 * キーワード「php supported version」に関連し、DOMがサポートする機能のバージョンを
9 * 確認する例です。
10 */
11function checkDomNotationSupport(): void
12{
13    // DTD (Document Type Definition) と NOTATION を含むXML文字列を定義します。
14    // ここでは 'gif' という名前のNOTATIONを定義し、画像タイプ 'image/gif' に関連付けています。
15    $xmlString = <<<XML
16    <!DOCTYPE root [
17      <!NOTATION gif SYSTEM "image/gif">
18      <!ELEMENT root EMPTY>
19    ]>
20    <root/>
21    XML;
22
23    // 新しいDOMDocumentオブジェクトを作成し、定義したXMLを読み込みます。
24    $dom = new DOMDocument();
25    $dom->loadXML($xmlString);
26
27    // ドキュメントタイプ (DOCTYPE) ノードを取得します。
28    // NOTATIONはDOCTYPE内に定義されるため、ここからアクセスします。
29    $doctype = $dom->doctype;
30
31    // DOCTYPEが存在しない場合は処理を中断します。
32    if (!$doctype) {
33        echo "エラー: DOCTYPE が見つかりませんでした。\n";
34        return;
35    }
36
37    // DOCTYPEからNOTATIONのリストを取得します。
38    // notaitons プロパティは DOMNamedNodeMap オブジェクトを返します。
39    $notations = $doctype->notations;
40
41    // 定義した 'gif' NOTATIONを名前で取得します。
42    $gifNotation = $notations->getNamedItem('gif');
43
44    // 取得したオブジェクトがDOMNotationのインスタンスであることを確認します。
45    if ($gifNotation instanceof DOMNotation) {
46        echo "DOMNotation 'gif' が正常に見つかりました。\n";
47
48        // 'XML' 機能の '1.0' バージョンがサポートされているかを確認します。
49        // これは、このDOM実装がXML仕様のバージョン1.0をサポートしているかという意味です。
50        $feature = "XML";
51        $version = "1.0";
52        $isSupported = $gifNotation->isSupported($feature, $version);
53
54        echo "DOMNotation::isSupported(\"$feature\", \"$version\"): ";
55        if ($isSupported) {
56            echo "はい、サポートされています。\n";
57        } else {
58            echo "いいえ、サポートされていません。\n";
59        }
60
61        // 例として、存在しない可能性のある機能とバージョンを試します。
62        // 一般的なPHPのDOM実装では'HTML'機能の'3.0'はサポートされていません。
63        $feature = "HTML";
64        $version = "3.0";
65        $isSupported = $gifNotation->isSupported($feature, $version);
66        echo "DOMNotation::isSupported(\"$feature\", \"$version\"): ";
67        if ($isSupported) {
68            echo "はい、サポートされています。\n";
69        } else {
70            echo "いいえ、サポートされていません。\n";
71        }
72
73    } else {
74        echo "エラー: DOMNotation 'gif' が見つかりませんでした。\n";
75    }
76}
77
78// 上記で定義した関数を実行します。
79checkDomNotationSupport();
80
81?>

PHPのDOMNotation::isSupportedメソッドは、XMLなどのDOM(Document Object Model)を扱う機能が、特定の機能($feature)とそのバージョン($version)をサポートしているかどうかを確認するために利用されます。このメソッドは、第一引数に「XML」や「HTML」のような機能名を文字列で、第二引数に「1.0」や「3.0」のようなバージョン番号を文字列で受け取ります。そして、指定された機能とバージョンが現在のDOM実装でサポートされていればtrueを、サポートされていなければfalseをブール値で返します。

提供されたサンプルコードでは、まずXML文書内に定義されたNOTATION(外部データの形式を定義する宣言)を読み込み、それに対応するDOMNotationオブジェクトを取得しています。このオブジェクトを用いて、例えば「XML」の「1.0」バージョンがサポートされているかを確認します。多くのPHP環境ではXML 1.0がサポートされているため、結果は「はい、サポートされています。」となります。また、一般的にサポートされていない「HTML」の「3.0」バージョンを試すことで、「いいえ、サポートされていません。」という結果になる例も示されています。これにより、実行中のPHP環境で、DOMが特定の機能やバージョンに対応しているかを動的に判断できるため、「php supported version」の確認に役立ちます。

DOMNotation::isSupportedは、特定のDOM実装が指定された機能とバージョンをサポートしているかを確認します。このDOMNotationオブジェクトは、XMLのDOCTYPE内に定義されたNOTATIONから間接的に取得する必要があり、直接インスタンス化するものではありません。isSupportedメソッドの引数$featureには「XML」や「HTML」のような機能名、$versionには「1.0」や「3.0」のようなバージョン番号を文字列で渡します。PHPの標準的なDOM実装では「XML」の「1.0」はサポートされますが、「HTML」など特定の機能はサポートされない場合が多いことに注意してください。このメソッドの結果は、PHPのバージョンや内部で利用されるlibxmlのバージョンに依存するため、実行環境によって異なる可能性があります。

PHP DOMNotation::isSupported で機能サポート確認する

1<?php
2
3/**
4 * DOMNotation::isSupported メソッドの動作を示すサンプルコードです。
5 *
6 * このメソッドは、XMLのDOMツリーにおいて特定のDOM機能が指定されたバージョンで
7 * サポートされているかを確認するために使用されます。
8 * 例えば、"XML"機能の"1.0"バージョンがサポートされているか、といった確認を行います。
9 * これは「php supported versions」というキーワードが示す「何らかのバージョンがサポートされているか」
10 * という文脈に沿っていますが、PHP言語自体のサポートバージョンとは異なります。
11 *
12 * PHP 8において、DOMNode::isSupported (DOMNotation::isSupported が継承しているメソッド) は
13 * 常に `true` を返します。これはW3C DOM仕様の古いメソッドであり、PHPでの実装では
14 * その判断ロジックは実装されておらず、常にサポートされているとみなされます。
15 *
16 * @param string $feature 確認するDOM機能名 (例: "XML", "HTML", "Core")
17 * @param string $version 確認するDOM機能のバージョン (例: "1.0", "2.0", "3.0")
18 * @return void
19 */
20function demonstrateDomNotationIsSupported(string $feature, string $version): void
21{
22    // DTD (Document Type Definition) に NOTATION 宣言を含むXMLを作成します。
23    // DOMNotation オブジェクトは、この NOTATION 宣言を表します。
24    $xmlString = <<<XML
25<?xml version="1.0" encoding="UTF-8"?>
26<!DOCTYPE example [
27  <!NOTATION custom-image-format SYSTEM "image/custom">
28  <!ELEMENT root EMPTY>
29]>
30<root/>
31XML;
32
33    $dom = new DOMDocument();
34    $dom->loadXML($xmlString);
35
36    // XMLのDTD情報から DOMNotation オブジェクトを取得します。
37    // DOMDocumentType::notations は、DTD内の全ての NOTATION を含む DOMNamedNodeMap です。
38    $notation = null;
39    if ($dom->doctype && $dom->doctype->notations->length > 0) {
40        $notation = $dom->doctype->notations->item(0);
41    }
42
43    if ($notation instanceof DOMNotation) {
44        echo "--- DOMNotation::isSupported Method Demonstration ---\n";
45        echo "Target DOMNotation nodeName: {$notation->nodeName}\n\n";
46
47        // isSupported メソッドを呼び出し、指定された機能とバージョンのサポート状況を確認します。
48        $isSupported = $notation->isSupported($feature, $version);
49
50        echo "Checking if DOM feature '{$feature}' version '{$version}' is supported:\n";
51        echo "Result: " . ($isSupported ? "Supported" : "Not Supported") . "\n\n";
52
53        echo "Note: In PHP 8, DOMNotation::isSupported (inherited from DOMNode::isSupported) always returns `true`, regardless of the provided feature and version.\n";
54        echo "This method is generally deprecated in modern DOM usage.\n";
55
56    } else {
57        echo "Error: Could not find a DOMNotation object in the provided XML. Please ensure the DTD contains a NOTATION declaration.\n";
58    }
59}
60
61// -----------------------------------------------------------
62// サンプル実行
63// -----------------------------------------------------------
64
65// 様々なDOM機能とバージョンでサポート状況を確認してみます。
66// PHPの現在の実装では、常に "Supported" と表示されます。
67demonstrateDomNotationIsSupported("XML", "1.0");
68echo "\n";
69demonstrateDomNotationIsSupported("Core", "2.0");
70echo "\n";
71demonstrateDomNotationIsSupported("HTML", "3.0"); // 存在しないDOM機能でも結果は同じ

PHPのDOMNotation::isSupportedメソッドは、XMLのDOMツリーにおいて、特定のDOM機能が指定されたバージョンでサポートされているかを確認するために使用されます。このメソッドは、XMLのDTD(文書型定義)内のNOTATION宣言を表すDOMNotationオブジェクトに対して呼び出されます。

引数としては、確認したいDOM機能の名前を文字列$feature(例えば"XML"や"Core")で、その機能のバージョンを文字列$version(例えば"1.0"や"2.0")で渡します。戻り値はbool型で、指定された機能とバージョンがサポートされていればtrue、そうでなければfalseを返します。

しかし、PHP 8におけるDOMNotation::isSupportedメソッドの実際の挙動は、提供された$feature$versionに関わらず、常にtrueを返します。これは、W3C DOM仕様における古いメソッドであり、PHPでの実装では、そのサポート判断ロジックが組み込まれていないためです。そのため、このメソッドは、実際のDOM機能のサポート状況を動的に判断する目的では機能しません。現代のDOMプログラミングにおいては、このメソッドは一般的に使用されません。

DOMNotation::isSupportedメソッドは、PHP 8において指定されたDOM機能やバージョンに関わらず、常にtrueを返します。これはW3C DOM仕様の古いメソッドであり、PHPの実装ではサポート判断ロジックが実装されておらず、現代のDOM利用では一般的に非推奨とされています。キーワードの「php supported versions」はPHP言語自体のサポートバージョンを指すことが多いですが、このメソッドはXMLのDOM機能のバージョンサポートを確認するものであり、PHP言語のサポートバージョンとは直接関係ありませんので混同しないようご注意ください。このメソッドの結果に基づいてアプリケーションの動作を制御するべきではありません。DOMNotationオブジェクトはXMLのDTD内のNOTATION宣言から取得する必要があります。

関連コンテンツ

関連IT用語

関連プログラミング言語