Signatur
Beschreibung
Dom\NodeList ist die moderne, namespaced Variante der älteren DOMNodeList-Klasse und gehört zur überarbeiteten DOM-Erweiterung, die mit PHP 8.4 eingeführt wurde. Sie hält eine geordnete Sammlung von Dom\Node-Objekten und wird häufig als Rückgabewert von Methoden wie Dom\Element::getElementsByTagName() oder Dom\Document::getElementsByTagName() verwendet.
Im Gegensatz zu einem einfachen Array ist eine Dom\NodeList live, d. h. Änderungen am zugrundeliegenden Dokument (z. B. Hinzufügen oder Entfernen von Knoten) spiegeln sich sofort in der Liste wider. Auf einzelne Elemente kann über die Methode item() oder per Array-Syntax zugegriffen werden.
Dank der Implementierung von Countable und IteratorAggregate lässt sich die Liste bequem mit count() ausmessen und mit foreach iterieren. Die Eigenschaft length gibt ebenfalls die Anzahl der enthaltenen Knoten zurück.
Die Klasse ist nicht direkt instanziierbar – Objekte dieser Klasse werden ausschließlich von DOM-Methoden erzeugt.
Beispiele
Alle Absätze eines Dokuments iterieren
<?php
$doc = Dom\HTMLDocument::createFromString('<html><body><p>Erster</p><p>Zweiter</p><p>Dritter</p></body></html>');
$absaetze = $doc->getElementsByTagName('p');
echo 'Anzahl Absätze: ' . count($absaetze) . PHP_EOL;
foreach ($absaetze as $absatz) {
echo $absatz->textContent . PHP_EOL;
}
Zugriff per Index und Live-Verhalten demonstrieren
<?php
$doc = Dom\HTMLDocument::createFromString('<html><body><p>Eins</p><p>Zwei</p></body></html>');
$absaetze = $doc->getElementsByTagName('p');
echo 'Vor Einfügen: ' . $absaetze->length . PHP_EOL;
// Neuen Absatz einfügen
$neuer = $doc->createElement('p');
$neuer->textContent = 'Drei';
$doc->body->appendChild($neuer);
// NodeList ist live – zeigt jetzt 3 Einträge
echo 'Nach Einfügen: ' . $absaetze->length . PHP_EOL;
// Zugriff per item()
echo $absaetze->item(2)->textContent . PHP_EOL;
// Wichtig · Fallstricke
Live-Liste: Da Dom\NodeList eine live Sicht auf das DOM darstellt, kann es beim Entfernen von Knoten innerhalb einer foreach-Schleife zu unerwarteten Ergebnissen kommen. In solchen Fällen sollte die Liste vorher in ein Array konvertiert werden: iterator_to_array($nodeList).
Nicht direkt instanziierbar: Der Versuch, new Dom\NodeList() aufzurufen, führt zu einem Fehler. Objekte dieser Klasse werden ausschließlich intern von der DOM-Erweiterung erstellt.
Kompatibilität: Dom\NodeList steht erst ab PHP 8.4 zur Verfügung. Für ältere PHP-Versionen ist die äquivalente Klasse DOMNodeList zu verwenden.