Mit der DOMXPath-Klasse in PHP wollte ich auf das erste Element in einem HTML-Dokument zugreifen, das mit der Klasse „foo“ bezeichnet war. Auf meinem lokalen System (PHP 5.6.14) funktionierte das folgendermaßen:
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DomXPath($doc);
$entries = $xpath->query("//*[contains(@class, 'foo')]");
$foo = $entries[0];
Auf einem Server mit PHP 5.4 warf dieser Code dann aber folgende Fehlermeldung:
Fatal error: Cannot use object of type DOMNodeList as array in /path/to/script.php on line 9
Nach einer kurzen Recherche bin ich auf diesen Request im PHP Bug Tracking System gestoßen:
DOMNodeList should implement ArrayAccess
Tatsächlich scheint es erst seit PHP 5.6.3 möglich, auf eine von DOMXPath::query zurückgegebene DOMNodeList wie auf ein Array zuzugreifen. Man kann diese allerdings in einer foreach-Schleife auslesen. In dieser Form funktioniert der obige Code auch unter älteren PHP-Versionen:
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DomXPath($doc);
$entries = $xpath->query("//*[contains(@class, 'foo')]");
foreach ($entries as $entry) {
$foo = $entry;
break;
}