Start · Sprachen · PHP · Referenz · Dom\Implementation

Dom\Implementation

Klasse

Bietet Methoden, die von der konkreten Dokumentimplementierung unabhängig sind, z. B. zum Erstellen von <code>Dom\Document</code>- oder <code>Dom\DocumentType</code>-Objekten.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\Implementation

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();
<?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" lang="de"><body>Hallo Welt!</body></html>

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();
Core 2.0 wird unterstützt. <?xml version="1.0" encoding="UTF-8"?> <catalog><item id="42">PHP-Buch</item></catalog>

// 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.