Facebook
Twitter
Google+
Kommentare
3

DOMDocument::ConfuseMe();

Ich möchte nicht den Eindruck erwecken, als wäre ich auf Kriegsfuß mit PHP – immerhin habe ich es als die Programmiersprache gewählt mit der ich meine Brötchen verdiene. Jedoch sind manche Eigenschaften der Sprache und der API wirklich skuril.

Wie Nils ja auch schon aufgezeigt hat, ist eine der merkwürdigsten Klassen von PHP sicherlich DOMDocument. Dem möchte ich mich anschließen und auch mich etwas darüber auslassen.

Oft habe ich bei PHP das Gefühl, dass sich die PHP-Entwickler nicht komplett von der prozeduralen Entwicklung lösen wollen, sondern es auch den Entwicklern recht machen wollen, die mit Objektorientierung nichts am Hut haben.

So kann die DOMDocument-Methode LoadXML (die XML-Daten aus einem String lädt) beispielsweise auf zwei verschiedene Arten aufgerufen werden:

  • Über einen statischen Aufruf der Methode DOMDocument::LoadXML( $string )
  • Über den Aufruf der Methode als Instanzmethode: $document->LoadXML( $string )

Die Dokumentation verrät, dass der „Return-Typ“ der Methode mixed ist.

Bei einem statischen Aufruf der Methode wird eine Instanz der Klasse erzeugt, das XML geladen und das neu erzeugte Objekt zurückgegeben. Bei einem Aufruf der Instanzmethode hingegen wird das XML geladen und als Boolean-Wert zurückgegeben, ob das XML geladen werden konnte.

  • Weshalb verwenden Bibliotheken im Zeitalter der Objektorientierung den „Datentyp“ mixed? Widerspricht das nicht jedem Ansatz der Objektorientierung?
  • Werden PHP-Entwickler nun ermutigt, unterschiedliche Implementierungen für Methoden abhängig davon, ob sie statisch oder auf eine Instanz aufgerufen wurden, zu machen? Sollte die API der Programmiersprache nicht viel mehr Vorbild für die Entwickler sein?
  • Werden Anwender meiner API nun auch versuchen, meine Methode statisch aufzurufen, um zu schauen, ob sie besondere Features entdecken? (Und Bugs, die auftreten können weil PHP sich komisch bei statischen Calls auf Instanzmethoden verhält)
  • Vorteile wie IDE Code Completion fallen natürlich auch weg, weil solche Spezialfälle wohl keiner normalen IDE beigebracht werden können. (Diese Aussage gilt für Eclipse natürlich nur unter Vorbehalt)
  • Der Output von PHPDocumentor usw. wird sicherlich nicht schöner durch solche Konstrukte

Dabei hätte man einfach konsequenterweise den statischen Aufruf verzichten können. Das, jedoch würde implizieren, dass man von PHP-Entwicklern erwarten kann, dass sie das Schlüsselwort new verwenden.

Ich wünsche mir eine Welt, in der PHP-Entwicklern zugetraut wird, OOP richtig zu praktizieren und in der mixed nicht existiert.

Über den Autor

Timo Holzherr

Software-Entwicklung ist für mich mehr als ein Beruf, mit dem ich mir die Brötchen verdiene - es ist meine Leidenschaft. Themen wie professionelle, objektorientierte Software-Entwicklung, moderne Web-Entwicklung, Agiles Projektmanagement sind für mich so spannend wie ein guter Krimi. Deshalb habe ich 2003-2006 Informationstechnik studiert und nach dem Studienabschluss meinen Job als Web-Entwickler gewählt. Seit 2006 halte ich Vorlesungen im Fach "Software-Engineering" an der DHBW (Dualen Hochschule Baden-Württemberg) in Stuttgart und bin im Prüfungsausschuss der DHBW in Horb. Obwohl ich so viel Zeit beruflich mit der Entwicklung von Software verbringe, bin ich privat trotzdem unermüdlich und habe deshalb mein zweites Hobby, die Musik, mit dem ersten Verbunden: Im Juli 2009 habe ich mein erstes großes privates Web-Projekt gestartet - GUESSASONG. (http://www.guessasong.net/) Ich bin gespannt, was ihr über meine Beiträge denkt und werde versuchen trotz vollem Terminplan regelmäßig hier Posts zu machen.
Kommentare

3 Comments

  1. Moins,

    der Aufruf von DomDocument::load* führt zu einem E_STRICT. Daraus lässt sich imho schon deutlich erkennen, dass diese Art des Aufrufs – selbst wenn er als gültig dokumentiert ist – technisch nicht sauber ist.

    Ob ein statischer Aufruf ansich ein Problem darstellt, das sogar zu „nicht richtigem“ OOP führt, würde ich jetzt allerdings nicht so unterschreiben. Lediglich die Tatsache, dass die gleiche Methode je nach Aufruf-Context sich anders verhält ist unschön und mit Sicherheit unsauber.

    CYA Arne

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen