Signatur
Beschreibung
Dom\HTMLElement ist Teil des modernen Dom\-Namespaces, der mit PHP 8.4 eingeführt wurde und eine vollständig spezifikationskonforme DOM-Implementierung bereitstellt. Im Gegensatz zur älteren DOMElement-Klasse arbeitet Dom\HTMLElement nach dem HTML-Living-Standard des WHATWG und kennt HTML-spezifische Besonderheiten wie case-insensitive Tag-Namen, implizite Elemente und HTML-typisches Parsing.
Die Klasse erbt von Dom\Element, welche wiederum von Dom\Node abstammt. Dadurch stehen alle Standard-DOM-Methoden wie appendChild(), getAttribute(), querySelector() und viele mehr zur Verfügung. Instanzen dieser Klasse entstehen typischerweise durch Laden eines HTML-Dokuments mit Dom\HTMLDocument::createFromString() oder Dom\HTMLDocument::createFromFile().
Dom\HTMLElement ist kein direkt instanziierbares Objekt – es dient als Basisklasse für konkrete HTML-Elemente (z. B. Dom\HTMLBodyElement, Dom\HTMLAnchorElement usw.) und wird beim Traversieren oder Manipulieren von HTML-Dokumenten automatisch zurückgegeben. Der neue Namespace garantiert eine strikte Trennung zwischen HTML- und XML-Kontexten.
Typische Anwendungsfälle sind das Parsen, Auslesen und Bearbeiten von HTML-Inhalten serverseitig – etwa beim Web-Scraping, beim Aufbereiten von Nutzer-Eingaben oder beim serverseitigen Rendern von HTML-Fragmenten.
Beispiele
HTML-Dokument laden und Elemente auslesen
<?php
$html = <<<HTML
<!DOCTYPE html>
<html>
<body>
<h1 id="title">Willkommen</h1>
<p class="intro">Dies ist ein Absatz.</p>
</body>
</html>
HTML;
$doc = Dom\HTMLDocument::createFromString($html);
$h1 = $doc->getElementById('title');
echo get_class($h1) . PHP_EOL; // Dom\HTMLElement
echo $h1->textContent . PHP_EOL; // Willkommen
echo $h1->tagName . PHP_EOL; // H1
$p = $doc->querySelector('.intro');
echo $p->textContent . PHP_EOL; // Dies ist ein Absatz.
Elemente manipulieren und neues Element einfügen
<?php
$doc = Dom\HTMLDocument::createFromString(
'<!DOCTYPE html><html><body><ul id="liste"></ul></body></html>'
);
$ul = $doc->getElementById('liste');
foreach (['Eins', 'Zwei', 'Drei'] as $text) {
$li = $doc->createElement('li');
$li->textContent = $text;
$ul->appendChild($li);
}
echo $doc->querySelector('#liste')->innerHTML;
// Wichtig · Fallstricke
Neu in PHP 8.4: Der Dom\-Namespace ersetzt nicht die klassische DOM-Erweiterung (DOMElement etc.), sondern existiert parallel dazu. Beide Namespaces sind nicht kompatibel miteinander – Objekte können nicht gemischt werden.
HTML-spezifisches Verhalten: Tag-Namen werden in Dom\HTMLElement in Großschreibung zurückgegeben (z. B. H1), was dem HTML-Standard entspricht. Im XML-Modus (Dom\XMLDocument) bleibt die ursprüngliche Schreibweise erhalten.
Keine direkte Instanziierung: new Dom\HTMLElement() ist nicht möglich. Instanzen werden ausschließlich durch DOM-Fabrikmethoden wie Dom\HTMLDocument::createElement() oder durch Traversierung erzeugt.