Start · Sprachen · PHP · Referenz · Dom\ParentNode

Dom\ParentNode

Interface

Repräsentiert einen DOM-Knoten, der Kindelemente besitzen kann, und bietet Methoden sowie Eigenschaften für den Zugriff auf diese.

seit PHP 8.4.0 Kategorie: xml

Signatur

interface ParentNode

Beschreibung

Dom\ParentNode ist ein Interface aus der modernen Dom-Erweiterung (PHP 8.4+), das von Knoten implementiert wird, welche Kindelemente enthalten können – konkret von Dom\Document, Dom\Element und Dom\DocumentFragment. Es spiegelt das gleichnamige Web-API-Interface wider und ergänzt die klassenbasierte DOM-API um komfortablere Zugriffsmöglichkeiten.

Das Interface stellt lesende Eigenschaften wie children, firstElementChild, lastElementChild und childElementCount bereit, mit denen ausschließlich Element-Knoten (keine Text- oder Kommentarknoten) angesprochen werden. Zusätzlich bietet es die Methoden prepend(), append(), replaceChildren() sowie querySelector() und querySelectorAll(), die das Arbeiten mit dem DOM erheblich vereinfachen.

Im Unterschied zur älteren DOMNode-Hierarchie ist Dom\ParentNode Teil der neuen, strikteren und HTML5-konformen DOM-API, die in PHP 8.4 eingeführt wurde. Wer mit dieser API arbeitet, profitiert von typsicheren Rückgabewerten und einer klareren Trennung zwischen Element- und Nicht-Element-Kindknoten.

Typischerweise wird dieses Interface nicht direkt implementiert, sondern über die konkreten Klassen genutzt. Es kann jedoch für Typ-Hinweise in eigenen Funktionen verwendet werden, um ausdrücklich sicherzustellen, dass ein übergebener Knoten Kindelemente besitzen kann.

Beispiele

Kindelemente zählen und darauf zugreifen

<?php
$dom = Dom\HTMLDocument::createFromString('<ul><li>Eins</li><li>Zwei</li><li>Drei</li></ul>');

$ul = $dom->querySelector('ul');

// childElementCount: Anzahl der direkten Kinder als Elemente
echo $ul->childElementCount . PHP_EOL; // 3

// firstElementChild / lastElementChild
echo $ul->firstElementChild->textContent . PHP_EOL; // Eins
echo $ul->lastElementChild->textContent . PHP_EOL;  // Drei

// Alle Kinder als HTMLCollection
foreach ($ul->children as $child) {
    echo $child->textContent . PHP_EOL;
}
3 Eins Drei Eins Zwei Drei

Elemente einfügen mit append() und prepend()

<?php
$dom = Dom\HTMLDocument::createFromString('<div id="box"><p>Mitte</p></div>');

$box = $dom->getElementById('box');

// Neues Element am Anfang einfügen
$first = $dom->createElement('p');
$first->textContent = 'Anfang';
$box->prepend($first);

// Neues Element am Ende einfügen
$last = $dom->createElement('p');
$last->textContent = 'Ende';
$box->append($last);

foreach ($box->children as $child) {
    echo $child->textContent . PHP_EOL;
}
Anfang Mitte Ende

Typsicherer Funktionsparameter mit Dom\ParentNode

<?php
use Dom\ParentNode;

function countElements(ParentNode $node): int {
    return $node->childElementCount;
}

$dom = Dom\HTMLDocument::createFromString('<section><h1>Titel</h1><p>Text</p></section>');
$section = $dom->querySelector('section');

echo countElements($section) . PHP_EOL; // 2
2

// Wichtig · Fallstricke

Nur PHP 8.4+: Dom\ParentNode gehört zur neuen Dom-Erweiterung, die in PHP 8.4 eingeführt wurde. Sie ist nicht kompatibel mit der älteren DOM-Erweiterung (DOMDocument, DOMElement usw.). Beide APIs können im selben Projekt existieren, sind aber getrennt zu verwenden.

Die Eigenschaft children gibt eine Dom\HTMLCollection zurück, die ausschließlich Element-Knoten enthält. Text-, Kommentar- und andere Knoten werden dabei ignoriert – im Gegensatz zu childNodes, das alle Knotentypen liefert.

querySelector() und querySelectorAll() akzeptieren CSS-Selektoren. Bei ungültigen Selektoren wird eine Dom\Exception geworfen, daher empfiehlt sich deren Einsatz in einem try/catch-Block.