Facebook
Twitter
Google+
Kommentare
4

Flüssiges Interface

Ein flüssiges Interface bedeutet das jede Methode eine Referenz zu dem Objekt zurückgibt auf das es aufgerufen wurde, so das sofort ein erneuter Aufruf einer anderen Methode stattfinden kann. (Quelle: Zend)

Bis vor kurzem kannte ich dieses Interface oder besser diese Art zu programmieren auch nicht. Bei meinen Recherchen über das Zend Framework stieß ich dann auf das flüssige Interface. Am Beispiel von Klassen und ihren Settern möchte ich diese Technik kurz erläutern. Prinzipiell ist das Anwendungsszenario ganz einfach skizziert. Wir haben eine Klasse mit diversen Set Methoden, die alle nacheinander aufgerufen werden sollen. Betrachtet man eine Standard Implementierung einer solchen Klasse, dann sollte dieser Aufruf wie folgt aussehen.

       $class = new StandardClass( );
       $class->setFirstAttribute( 'firstAttributeValue' );
       $class->setSecondAttribute( 'secondAttributeValue' );
       $class->setThirdAttribute( 'thirdAttributeValue' );

Solche Codeblöcke sollte jeder schon einmal geschrieben haben. Das flüssige Interface geht jetzt davon aus, dass alle Set Methoden keine Rückgabewerte besitzen. Dieser Wert kann also noch frei verwendet werden. Und genau an diesem Fakt setzt das Interface an. Es benutzt diesen Wert einfach um die Instanz der Klasse selber zurückzugeben.

       class StandardClass
       {
         public function setFirstAttribute( $value )
         {
          // ... do something
          return $this;
         }
         // ... other methods
       }

Wichtig ist hier, dass durch diese Änderung das Verhalten der Klasse nicht verändert wurde. Es wird weiterhin der Legacy Code ohne Probleme, falls es vorher keine gab, durchlaufen. Funktionsaufrufe können nun viel einfacher konkateniert werden und somit eine flüssige Verwendung ermöglichen.

       $class = new StandardClass( );
       $class->setFirstAttribute( 'firstAttributeValue' )
             ->setSecondAttribute( 'secondAttributeValue' )
             ->setThirdAttribute( 'thirdAttributeValue' );

Fazit: Ich finde es nett von diesem Interface einmal gehört zu haben, keine Frage. Ich denke aber, dass ich es nie anwenden werde, da der Benefit dieser Technik meiner Meinung nach leider viel zu gering ist, um die Nachteile auszugleichen. Verwendet man das flüssige Interface verbaut man sich die Möglichkeit Setter mit einem Rückgabewert auszustatten. Ab und zu kommt man ja doch in die Situation, dass ein Setter z.B. einen boolschen Wert zurückliefert, da man wissen will auf das setzen nun geklappt hat oder nicht.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

4 Comments

  1. sher angenehm ist diese Technik, oftmals auch chaining genannt, allerdings im zusammenhand mit der Javascript-Bibliothek jQuery, wo diese Methode beinahe religiös durchgezogen wird. Dein Anspruch bezüglich Getter / Setter wird dann eher über Exceptions (im Fehlerfall) gelöst. Sehr elegant.

    Reply
  2. Ich persönliche nutze diese Methode bereits seit geraumer Zeit und muss sagen, dass ich sie nicht mehr missen möchte.

    Bzgl. deinem Punkt eines Rückgabewertes habe ich zusätzlich zur setX-Funktion eine issetX-Funktion hinzugefügt die mir einen boolschen Wert zurückgibt – bzgl. aufgrund einer isset($this->Variable)-Abfrage.

    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