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

【PHP8.x】DOMEntity::versionプロパティの使い方

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

作成日: 更新日:

基本的な使い方

DOMEntityクラスのversionプロパティは、エンティティのバージョン情報を取得または設定するために使用できるプロパティです。このプロパティは、エンティティがXML文書内でどのように定義されているかに関する情報を提供します。具体的には、エンティティ宣言で指定されたバージョン文字列を保持します。

XML文書には、バージョン属性が含まれることがあります。この属性は、文書で使用されているXMLのバージョンを示します。DOM(Document Object Model)を使用してXML文書を処理する際、DOMEntityオブジェクトは、XML文書内で定義されたエンティティを表します。このエンティティに関連付けられたバージョン情報は、versionプロパティを通じてアクセスできます。

versionプロパティは、通常、文字列型の値を持ちます。この文字列は、XML宣言またはDTD(Document Type Definition)で指定されたXMLのバージョンを表します。例えば、「1.0」や「1.1」などの値が設定されることがあります。

システムエンジニアがXML文書を解析し、特定のバージョンのXML規格に準拠しているかどうかを確認する際に、このプロパティは重要な役割を果たします。例えば、特定のバージョンのXMLで利用できない機能を使用しているかどうかを検証する際に役立ちます。また、XML文書の処理において、バージョン間の互換性を考慮する必要がある場合にも、このプロパティを参照することで適切な処理を実装できます。

DOMEntityオブジェクトのversionプロパティを利用することで、XML文書のバージョン情報をプログラムから容易に取得し、XML処理のロジックに組み込むことが可能になります。これにより、XML文書の整合性を保ち、様々なバージョンのXMLに対応した柔軟なシステムを構築することができます。

構文(syntax)

1readonly public string $version;

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHPバージョンを確認して表示する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * 現在のPHP実行環境のバージョンを確認して表示します。
7 *
8 * PHPには、実行中のバージョン情報を格納した `PHP_VERSION` という
9 * 便利な定義済み定数があります。
10 * この関数は、その定数の値を取得し、画面に出力します。
11 */
12function displayCurrentPhpVersion(): void
13{
14    // 定義済み定数 `PHP_VERSION` からバージョン文字列を取得します。
15    $version = PHP_VERSION;
16
17    // 取得したバージョン情報を標準出力に表示します。
18    // PHP_EOL はOSに応じた改行コードを出力するための定数です。
19    echo '現在のPHPバージョン: ' . $version . PHP_EOL;
20}
21
22// 関数を呼び出して、PHPのバージョンを表示します。
23displayCurrentPhpVersion();

このPHPコードは、プログラムを実行している環境のPHPバージョンを確認し、画面に表示するサンプルです。

displayCurrentPhpVersionという関数を定義し、その中でバージョン表示の処理を行っています。この関数は、外部から情報を受け取る必要がないため引数はありません。また、関数の最後に : void と記述されているのは、この関数が計算結果などの値を返す(returnする)のではなく、画面表示という処理のみを実行することを示しています。

関数内部では、まず PHP_VERSION というPHPが標準で用意している定義済み定数から、バージョン情報を取得しています。この定数には、'8.2.0' のような形式で現在のPHPのバージョン番号が格納されています。次に echo を使い、「現在のPHPバージョン: 」という文字列と取得したバージョン情報を連結して出力します。末尾の PHP_EOL は、実行環境のOSに適した改行コードを出力するための定数で、これにより表示結果がどの環境でも正しく改行されます。

コードの最後で displayCurrentPhpVersion(); と記述することで、定義した関数を呼び出し、一連の処理を実行しています。

このコードはPHP_VERSION定数でPHP実行環境のバージョンを取得します。この定数が返す値は'8.1.10'のような文字列です。そのため、単純な大小比較演算子(<>)でバージョンの新旧を判定しようとすると、'8.10.0''8.2.0'より小さいと判断されるなど、予期せぬ結果を招く可能性があります。バージョンの比較を安全かつ正確に行うには、専用のversion_compare()関数を使用することが強く推奨されます。または、PHP 5.2.7以降で利用可能な整数形式のPHP_VERSION_ID定数を使えば、数値として直接比較できます。

PHP DOMEntityのversionプロパティを確認する

1<?php
2
3/**
4 * XML文書内のDTDで定義されたエンティティのバージョン情報を取得します。
5 *
6 * このサンプルは、PHPの実行環境のバージョンを確認するものではありません。
7 * XMLのDOM操作において、DOMEntityクラスの'version'プロパティを使用する例です。
8 */
9function displayEntityVersion(): void
10{
11    // バージョン情報を持つ外部エンティティをDTD内に定義したXML文字列。
12    // `<!ENTITY myLogo ... VERSION "1.0">` の "1.0" 部分が対象です。
13    $xmlString = <<<XML
14<?xml version="1.0" encoding="UTF-8"?>
15<!DOCTYPE document [
16  <!ENTITY myLogo SYSTEM "logo.png" NDATA png VERSION "1.0">
17]>
18<document>
19  <image src="myLogo" />
20</document>
21XML;
22
23    // DOMDocumentオブジェクトをインスタンス化
24    $dom = new DOMDocument();
25
26    // DTDを処理するために、オプションを指定してXMLを読み込む
27    $dom->loadXML($xmlString, LIBXML_DTDLOAD);
28
29    // ドキュメントタイプ定義 (DTD) を取得
30    $doctype = $dom->doctype;
31
32    if ($doctype) {
33        // DTDからエンティティのリストを取得
34        $entities = $doctype->entities;
35
36        // 指定した名前のエンティティ (DOMEntityオブジェクト) を取得
37        /** @var DOMEntity|null $entity */
38        $entity = $entities->getNamedItem('myLogo');
39
40        if ($entity) {
41            // DOMEntityのversionプロパティ(読み取り専用)から値を取得して表示
42            echo "エンティティ名: " . $entity->nodeName . PHP_EOL;
43            echo "バージョン情報: " . $entity->version . PHP_EOL;
44        }
45    }
46}
47
48// 関数を実行
49displayEntityVersion();

このPHPサンプルコードは、XML文書のDOM操作において、DTD(文書型定義)で定義されたエンティティのバージョン情報を取得する方法を示します。PHPの実行環境自体のバージョンを確認するコマンドや関数とは異なる点にご注意ください。

コード内では、まずVERSION "1.0"という情報を持つ外部エンティティmyLogoをDTD内に定義したXML文字列を用意します。次に、DOMDocumentオブジェクトを生成し、loadXMLメソッドでこのXML文字列をプログラムで扱える形式に変換します。この際、オプションとしてLIBXML_DTDLOADを指定することで、DTD部分も正しく解析されます。

続いて、文書オブジェクトのdoctypeプロパティからDTD情報を取得し、さらにその中のentitiesプロパティを通じてエンティティのリストにアクセスします。リストからgetNamedItemメソッドで特定の名前(myLogo)を持つエンティティを取得すると、DOMEntityオブジェクトが得られます。

最後に、このDOMEntityオブジェクトが持つversionプロパティを参照します。このプロパティは読み取り専用で、DTDで定義されたエンティティのバージョン情報を文字列として保持しています。値を取得するプロパティのため、引数はありません。このサンプルでは、取得したバージョン文字列 "1.0" を画面に出力します。

このサンプルコードは、PHP自体のバージョンを確認するものではなく、XMLのDTD内で定義されたエンティティのバージョン情報を取得するものです。このversionプロパティは、DTD内でVERSION属性が指定されたエンティティに対してのみ有効な値を持ちます。そのため、コード内でloadXMLメソッドの第二引数にLIBXML_DTDLOADを指定し、DTDを明示的に読み込むことが必須です。このプロパティは読み取り専用のため、コードから値を書き換えることはできません。また、$dom->doctype$entities->getNamedItem()は対象が存在しない場合にnullを返すことがあるため、if文で存在を確認してからプロパティにアクセスすることが安全な記述に繋がります。

関連コンテンツ

関連プログラミング言語

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