• DOMDocument::ConfuseMe();

    von am 2. November 2008

    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.

    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, ...

    Zum Profil von Timo Holzherr

    3 Kommentare »


    • Arne Blankerts
      am 5. Dezember 2008 um 10:46 Uhr

      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


    • PHPhatesMe … — myBlog
      am 4. August 2009 um 17:29 Uhr

      [...] die Tücke die ein PHP-Entwickler immer wieder “erleiden” muss. Deshalb habe ich den Artikel von Timo ausgewählt, da ich mit dem DOMDocument auch schon meine Kämpfe ausgefochten habe [...]


    • Timo Holzherr
      am 4. August 2009 um 20:12 Uhr

      Danke, Daniel :-)

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.