16.06.2005, 10:27 Uhr

Mit PHP 5 tut sich eine neue Welt auf

Mit der PHP-Version 5 kommen auch neue Möglichkeiten, mit XML zu arbeiten, hinzu. Beispiele sind SimpleXML und XMLReader.
XML ist heute aus vielen Anwendungen, besonders aus Internetanwendungen nicht mehr wegzudenken. PHP, eine der meist benutzten Sprachen im Webbereich, hat in der Version 5 enorm viel Neues zu bieten. Neben den komplett überarbeiteten und den aktuellen Normen angepassten Erweiterungen aus PHP 4 (SAX, DOM und XSLT), kamen neue Möglichkeiten mit XML zu arbeiten dazu (SimpleXML, XMLReader). Diese Erneuerungen ermöglichen einen einfacheren und schnelleren Zugang zu XML, die dank einer neuen gemeinsamen Code-Basis auch weniger fehleranfällig und besser in PHP integriert sind.

Gewicht für XML

PHP bietet eigentlich bereits seit der Version 3.0 Unterstützung für XML. Allerdings hat es die Entwicklergemeinschaft verschlafen, den vielen Weiterentwicklungen im XML-Bereich genügend Gewicht zu geben und die XML-Unterstützung kontinuierlich auszubauen. Dies änderte sich nun mit der im letzten Sommer veröffentlichten Version 5.0 von PHP. Neben der vollständig überarbeiteten Zend Engine (dem Kern von PHP), die unter anderem nun ein sauberes objekt-orientiertes Programmieren ermöglicht, wurden alle XML-Erweiterungen neu geschrieben und auf eine gemeinsame Code-Basis gebracht. Für diese Vereinheitlichung wurde die libxml2-Bibliothek des Gnome-Projekts verwendet, welche zum Teil schon in PHP 4 zum Einsatz kam und durch einen grossen Funktionsumfang, einfache Erweiterbarkeit und hohe Geschwindigkeit hervorsticht. Dies ermöglichte es den Entwicklern, sich auf die eigentlichen Schnittstellen zu PHP zu konzentrieren. Andererseits konnte so auch eine gewisse Interoperabilität zwischen den einzelnen Modulen garantiert werden, die auch dem Endanwender zu Gute kommt. Zusätzlich konnte dank der neuen Zend Engine die XML-Unterstützung tiefer in PHP integriert werden. So ist es nun möglich, innerhalb von XML-Dokumenten auf sogenannte Stream Wrapper zuzugreifen. Stream Wrapper sind in PHP geschriebene Dateizugriffsklassen und können als Ersatz für die implementierten Stream Wrapper wie beispielsweise file:// und http:// dienen.
In PHP 4 konnte man in der Grundeinstellung nur die SAX-Erweiterung verwenden um XML-Dokumente zu verarbeiten. Die mächtigeren DOM-oder XSLT-Funktionen mussten zusätzlich installiert werden. Zusammen mit der nicht immer stabilen Qualität haben diese Erweiterungen darum nie eine grosse Verbreitung gefunden.
Mit PHP 5 werden nun aber die SAX-, die DOM-, die SimpleXML- und die SOAP-Module automatisch mitinstalliert, so dass ihre Funktione n nun ohne die Gefahr von fehlenden -Bib-liotheken beim End-anwender eingesetzt werden können. Die XSLT- und die XMLReader-Erweiterung müssen immer noch zusätzlich installiert werden, werden aber mit dem PHP-Grundpaket mitgeliefert.
Die vielen PHP-Programmierern sicher bekannte SAX-Erweiterung hat sich von der Schnittstelle her in PHP 5 nicht geändert, sie verwendet aber nun ebenfalls die libxml2- anstatt der expat-Bibliothek. Dies hatte zur Folge, dass sich doch ein paar kleinere Inkompatibilitäten in PHP 5.0 eingeschlichen haben. Die wohl auffälligste ist, dass nun auch SAX per Default den universellen UTF-8-Zeichensatz gegenüber ISO-8859-1 benutzt.

DOM-Standard umgesetzt

Einer der Hauptkritikpunkte am XML-Support in PHP 4 war die DOM-Erweiterung. Diese versprach zwar Kompatibilität mit dem vom W3C verabschiedeten Standard, konnte diese aber trotz vielen Änderungen nie einhalten. Zudem waren immer wieder Probleme mit dem Speichermanagement aufgetaucht, welche erst in der Version 4.3 beseitigt werden konnten. Bei der Entwicklung von PHP 5 wurde auf alle diese Kritikpunkte eingegangen und der DOM-Standard bis und mit Level 2 komplett umgesetzt, DOM-Level-3-Methoden und Eigenschaften wurden übernommen, wo dies als sinnvoll erachtet wurde. Heute steht mit der DOM-Erweiterung in PHP 5 ein Werkzeug zur Verfügung, das den Vergleich mit Implementationen in anderen Sprachen wie Java oder C# nicht zu scheuen braucht. Neben den traditionellen DOM-Methoden wurden auch eine HTML-Schnittstelle, XML-Validation (mit DTD, RelaxNG und XML Schema), vollständiger XML-Namespaces und XPath-Support eingebaut.

Einfacher mit SimpleXML

Wem DOM zu kompliziert oder zu aufwändig ist, kann auf das neue Modul SimpleXML zurückgreifen. Mit SimpleXML werden XML-Dokumente auf die PHP-Objektstruktur abgebildet und können anschliessend wie normale PHP Objekte behandelt werden. Dies funktioniert nicht in allen Fällen gleich gut, da eine genau Abbildung nicht möglich ist. Aber zum Einlesen von einfachen XML-Dokumenten (z.B.Konfigurationsdateien) ist dies eine sehr brauchbare Alternative. Geschwindigkeits- und Speichermässig gewinnt man mit SimpleXML jedoch nichts gegenüber DOM, da im Hintergrund dieselbe Technologie verwendet wird. Ein Wechseln der Objekte vom SimpleXML in den DOM-Modus für aufwändigere Operationen ist aus diesem Grunde jedoch sehr schnell und ohne Performance-Verluste möglich.
Eine weitere praktische Erweiterung zum Parsen von XML-Dokumenten ist XMLReader. Diese ist schon seit der Veröffentlichung von PHP 5.0 via PECL erhältlich, wird nun aber in PHP 5.1 standardmässig mitgeliefert. XMLReader ist ähnlich wie SAX ein statusloser XML-Parser und kann deshalb mühelos auch grosse XML-Dokumente verarbeiten. XMLReader ist aber ein so genannter Pull Parser und kommt im Gegensatz zu SAX ohne die vielen Callback-Funktionsaufrufe aus. Dies macht XMLReader etwa doppelt so schnell wie SAX und ist auch einfacher zu programmieren. Zusätzlich unterstützt XMLReader alle XML-Elemente (z.B. Namespaces), und die Validierung gegen eine DTD- oder ein RelaxNG-Dokument ist speichersparend möglich.
LIBXSLT-Transformer
Die Sprache XSLT wird in PHP seit der Version 4.1 offiziell unterstützt, damals allerdings noch mit der Sablotron-Bibliothek. In PHP 5.0 wird nun standardmässig der LIBXSLT-Transformer - ebenfalls aus dem Gnome-Projekt - verwendet. Auch hier hat vor allem die bessere Performance für diese Bibliothek gesprochen. Durch diesen Wechsel gibt es neben einer anderen API auch einige weitere Differenzen zu beachten. Dafür gewinnt man eine bessere Integration ins PHP-Gesamtsystem und einige neue Möglichkeiten. So ist es nun möglich von XSLT aus PHP-Funktionen aufzurufen. Damit kann man einige grundsätzlich bedingte Schwächen von XSLT umgehen. Im Gegenzug verliert man aber die Portabilität der XSLT-Stylesheets, da diese dann nur noch unter PHP laufen werden.

Soap und XML-RPC

Wer im Webbereich XML sagt, meint damit auch immer wieder Webservice-Protokolle wie Soap und XML-RPC. Mit PHP 4 konnten diese Protokolle zwar benutzt werden, aber die Einbindung war meistens eher umständlich und langsam. Aus diesem Grunde bekam PHP 5 eine komplett neue, standardmässig mitgelieferte Soap-Erweiterung. Diese nimmt dem Entwickler viel Arbeit ab und ermöglicht es, einen Soap-Client respektiv Server in wenigen Zeilen Code zusammenzustellen.
Für alle PHP-Entwickler, die sich ernsthaft mit XML beschäftigen lohnt sich ein Umstieg auf PHP 5 unbedingt. Die in den nächsten Monaten erscheinende Version 5.1 wird in Detailbereichen nochmals Verbesserungen bringen, vor allem aber ein neues Fehlerbehandlungs-System, welches in PHP 5.0 doch stark vermisst wurde.
Christian Stocker


Das könnte Sie auch interessieren