Signatur
Beschreibung
Dom\DocumentType ist Teil der modernen, namespaced DOM-API, die mit PHP 8.4 eingeführt wurde. Sie repräsentiert den <!DOCTYPE>-Knoten eines Dokuments und implementiert die DOM-Spezifikation für DocumentType. Über dieses Objekt lassen sich Metainformationen des Dokumenttyps wie der Name, der öffentliche Bezeichner (public identifier) und der System-Bezeichner (system identifier) auslesen.
Ein Dom\DocumentType-Objekt wird nicht direkt instanziiert, sondern ist über die Eigenschaft Dom\Document::$doctype zugänglich, wenn ein Dokument geparst wird, das einen Doctype enthält. Es ist ein reines Leseobjekt – die Eigenschaften können nicht nachträglich verändert werden.
Typische Anwendungsfälle sind die Validierung oder Inspektion von HTML- und XML-Dokumenten, bei denen man prüfen möchte, welcher Dokumenttyp deklariert wurde, z. B. ob es sich um ein XHTML-Dokument handelt oder ein reines HTML5-Dokument (das keinen formalen Public-Identifier besitzt).
- name: Der Name des Dokumenttyps, z. B.
htmloderroot. - publicId: Der öffentliche Bezeichner, z. B.
-//W3C//DTD XHTML 1.0 Strict//EN. - systemId: Der System-Bezeichner, z. B. eine URL zur DTD.
Beispiele
Doctype eines HTML-Dokuments auslesen
<?php
$html = '<!DOCTYPE html><html><head><title>Test</title></head><body></body></html>';
$doc = Dom\HTMLDocument::createFromString($html);
$doctype = $doc->doctype;
if ($doctype !== null) {
echo 'Name: ' . $doctype->name . PHP_EOL;
echo 'PublicId: ' . $doctype->publicId . PHP_EOL;
echo 'SystemId: ' . $doctype->systemId . PHP_EOL;
} else {
echo 'Kein Doctype vorhanden.' . PHP_EOL;
}
Doctype eines XHTML-Dokuments auslesen
<?php
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>XHTML</title></head>
<body></body>
</html>';
$doc = Dom\XMLDocument::createFromString($xml);
$doctype = $doc->doctype;
if ($doctype !== null) {
echo 'Name: ' . $doctype->name . PHP_EOL;
echo 'PublicId: ' . $doctype->publicId . PHP_EOL;
echo 'SystemId: ' . $doctype->systemId . PHP_EOL;
}
// Wichtig · Fallstricke
Nur lesend: Die Eigenschaften name, publicId und systemId sind schreibgeschützt. Versuche, sie zu setzen, führen zu einem Fehler.
Neue DOM-API: Dom\DocumentType gehört zur modernen Dom\-Namespace-API (PHP 8.4+) und ist nicht identisch mit dem älteren DOMDocumentType aus der klassischen ext/dom-Erweiterung. Beide Klassen existieren nebeneinander, sind aber nicht kompatibel.
Kein Doctype: Bei Dokumenten ohne Doctype-Deklaration ist Dom\Document::$doctype null – eine Nullprüfung vor dem Zugriff ist daher wichtig.