Signatur
Beschreibung
Dom\Implementation ist Teil der modernen Dom-Erweiterung (PHP 8.4+) und entspricht dem W3C-DOM-Level-2-DOMImplementation-Interface. Ein Instanzobjekt erhält man typischerweise über die Eigenschaft Dom\Document::$implementation oder durch direktes Instanziieren.
Die Klasse bietet Hilfsmethoden, die nicht an ein konkretes Dokument gebunden sind: So kann man mit createDocument() ein vollständiges XML-Dokument inklusive optionaler Namespace- und Dokumenttyp-Angaben erzeugen, mit createDocumentType() einen eigenständigen Dom\DocumentType-Knoten anlegen und mit hasFeature() prüfen, ob eine bestimmte DOM-Funktion unterstützt wird.
Im Gegensatz zur älteren DOMImplementation-Klasse (ohne Namespace) arbeitet Dom\Implementation strikt nach der aktuellen DOM-Spezifikation, wirft Dom\Exception-Ausnahmen bei ungültigen Argumenten und unterstützt moderne PHP-Typdeklarationen.
Typischer Einsatz: programmatisches Erstellen von XML-Dokumenten von Grund auf, ohne zuvor einen Parser anzusprechen, sowie das Erzeugen von DocumentType-Knoten für DTD-Referenzen.
Beispiele
Neues XML-Dokument über Dom\Implementation erzeugen
<?php
// Dom\Implementation direkt instanziieren
$impl = new Dom\Implementation();
// DocumentType für XHTML anlegen
$doctype = $impl->createDocumentType(
'html',
'-//W3C//DTD XHTML 1.0 Strict//EN',
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
);
// Vollständiges XML-Dokument mit Namespace und DocumentType erstellen
$doc = $impl->createDocument(
'http://www.w3.org/1999/xhtml',
'html',
$doctype
);
// Rootknoten abrufen und Inhalt hinzufügen
$root = $doc->documentElement;
$root->setAttribute('lang', 'de');
$body = $doc->createElementNS('http://www.w3.org/1999/xhtml', 'body');
$text = $doc->createTextNode('Hallo Welt!');
$body->appendChild($text);
$root->appendChild($body);
echo $doc->saveXML();
Implementation über Dom\Document::$implementation abrufen
<?php
// Vorhandenes Dokument laden
$doc = Dom\XMLDocument::createFromString('<root><child/></root>');
// Implementation-Objekt aus Dokument holen
$impl = $doc->implementation;
// Feature-Unterstützung prüfen
$supported = $impl->hasFeature('Core', '2.0');
echo $supported ? 'Core 2.0 wird unterstützt.' : 'Nicht unterstützt.';
echo PHP_EOL;
// Neues leeres Dokument ohne Namespace und ohne DocumentType erzeugen
$newDoc = $impl->createDocument(null, 'catalog', null);
$catalog = $newDoc->documentElement;
$item = $newDoc->createElement('item');
$item->setAttribute('id', '42');
$item->textContent = 'PHP-Buch';
$catalog->appendChild($item);
echo $newDoc->saveXML();
// Wichtig · Fallstricke
Namespace-Trennung: Dom\Implementation (PHP 8.4+) und DOMImplementation (legacy) sind separate Klassen. Code, der die alte Klasse verwendet, muss für die neue Erweiterung angepasst werden.
Ausnahmen: Ungültige Qualifiziernamen oder Namespace-URI-Kombinationen lösen eine Dom\Exception aus (z. B. INVALID_CHARACTER_ERR oder NAMESPACE_ERR). Anders als bei der alten DOMImplementation werden Fehler nicht stillschweigend ignoriert.
hasFeature(): Gemäß aktueller DOM-Spezifikation gibt hasFeature() stets true zurück und dient hauptsächlich der Abwärtskompatibilität.