• Duck Typing

    von am 6. September 2008

    Obwohl duck typing keine Technik ist, die man in PHP einsetzt, denke ich doch, dass man mal einen Artikel drüber verfassen kann. Da Ruby, einer der größten Konkurrenten von PHP, diese Art zu typisieren verwendet wollte ich erst recht mal ein paar Worte hierzu verlieren. Wie gesagt, ich mag den Blick über den Tellerrand.

    „When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.“

    Im Grunde genommen beschriebt dieses Gedicht genau die Funktionweise des duck typings und wie man sich vielleicht bereits denken kann stammt der Name wirklich von diesen Zeilen von James Whitcomb Rileys ab. Bei dieser Technik wird zur Laufzeit überprüft, ob ein Objekt die benötigten Merkmale besitzt. Definiert man zum Beispiel einen Transmogrifier (TM) – ihr werdet euch jetzt fragen was so ein Transmogrifier macht, aber was macht so ein Teil nicht … Ok wieder zurück zum Thema. Wir haben also den TM, diesen kennzeichnet, dass man sich reinsetzen kann, er also die Funktion sitIn( ) besitzt. Des Weiteren muss es transmogrifizieren können transmogrify( ). In PHP müsste ich jetzt ein Interface defnieren und alle Klassen davon ableiten, die ein Transmogrifier sein sollen. Beim Duck Typing reicht es hingegen schon, dass diese Funktionen vorhanden sind. Dies wird zur Laufzeit ermittelt. Alle Klassen, die dieses zwei Methoden implementieren sind also von Typ eines Transmogrifiers und können auch in diesem Kontext benutzt werden. 

    Ok, der Ansatz ist klar, aber wo sind jetzt die Vorteile bei dieser Art Interfaces zu deklarieren. Ein großer Vorteil ist, dass ich mit Objekten hantieren kann, die alle benötigten Eigenschaften mit sich bringen, aber nicht explizit vom gewünschten Typ sind. Klingt ja eigentlich ganz nett. Das Problem dabei ist aber, dass nicht alles, was wie eine Ente aussieht, läuft wie eine Ente und quaked wie eine Ente wirklich eine Ente ist. Vielleicht ist es auch ein Drache, der sich in eine Ente verwandelt hat. Und will mal so einen in seinem Teich haben? Ich muss dazu sagen, dass ich das Beispiel aus der englischen Wikipedia genommen habe, aber ich fand’s eigentlich ganz nett. Ich glaube auch, dass man ziemlich schnell den Überblick verlieren kann, welchen Typen denn jetzt nun in einem Projekt existieren. Aber vielleicht haben wir ja das Glück und ein erfahrener Duck Typer liest diesen Text und kann ein paar Worte hierzu verfassen.

    Ich bin gerade am überlegen, ob man mit den Bordmitteln von PHP auch eine Art Duck Typing hin bekommen kann. Eigentlich sollte ja schon alles nativ unterstützt werden. Ich glaube ich werde die nächste Zeit mal ein wenig mit der Idee spielen und dann, wenn ich vielleicht zu einem Ergebnis gekommen bin, werde ich es auch wissen lassen.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    Keine Kommentare »

    Noch keine Kommentare

    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.