ich finde immer Klassenkonstrukte, die mir gänzlich unbekannt sind.
Wie müsste ich eine Klasse konzipieren, damit folgende Schreibweisen möglich
sind?
$q = Doctrine_Query::create()
->select('u.*, p.phonenumber')
->from('User u')
->leftJoin('u.Phonenumbers p');
Mich interessiert dabei der Pfeiloperator, der hier "in Reihe" eingesetzt
wird.
Was steckt dahinter, wie heisst das Verfahren (so für Google Recherchen) und
warum macht man das so?
Danke und Gruß
André
Man spricht von "flüssigen Schnittstellen" bzw. "Fluent Interface"
(http://de.wikipedia.org/wiki/Fluent_Interface).
Der Trick ist eigentlich recht einfach: jede Methode muss $this zurückgeben.
Wer's mag...
> Man spricht von "flüssigen Schnittstellen" bzw. "Fluent Interface"
> (http://de.wikipedia.org/wiki/Fluent_Interface).
Na, den Begriff hätte ich finden können :-(
> Der Trick ist eigentlich recht einfach: jede Methode muss $this
> zurückgeben.
Das habe ich mir auch gedacht und mal ausprobiert. Jedoch fand ich
das "merkwürdig", deshalb meine Frage.
> Wer's mag...
Ich werde es mir mal anschauen.
Erstmal danke für deine (schnelle) Hilfe.
Gruß
André
Ich empfinde die Möglichkeit als sehr angenehm vor allem wenn es darum
geht von einem Objekt sehr viele Methoden aufzurufen. Die Alternative
sieht meist so aus, dass man einen kurzen nichts sagenden Bezeichner
auswählt um weniger Schreibarbeit zu haben, da habe ich doch lieber
Dinge wie folgendes:
$sprechenderBezeichner = new Klasse();
$sprechenderBezeichner->Methode1()
->Methode2()
->Methode3()
->Methode4();
Bei Doctrine wird durch die statische Methode wohl der Nachteil
umgangen, dass es in PHP nicht erlaubt ist eine Methode nach einer
Objekterstellung aufzurufen ohne eine Variable zu erstellen, also
folgendes geht ja in PHP nicht:
new Klasse()->Methode1();
In dem Falle nehm ich aber lieber die Zeile mehr in Kauf für ein Objekt
statt einer etwas komischen Struktur den Konstruktur über eine statische
Methode nachzubilden.
--
Mit freundlichen Grüßen,
Christoph Herrmann
> Andre Schmidt schrieb:
>>> Wer's mag...
>>
>> Ich werde es mir mal anschauen.
>> Erstmal danke für deine (schnelle) Hilfe.
>
> Ich empfinde die Möglichkeit als sehr angenehm vor allem wenn es darum
> geht von einem Objekt sehr viele Methoden aufzurufen.
Ich war nur leicht verwirrt, warum das gemacht wird. Das wie hatte ich ja
schon ausprobiert (immer return $this), aber das war mir suspekt.
Immer doof wenn einem dann der Begriff zum Suchen fehlt ;-)
Bei Doctrine habe ich das bisher als ganz angenehm empfunden, zumal die Art
und Weise eine SQL Abfrage aufzubauen doch recht dicht am
SQL-Syntax/Prinzip ist - so kommt man nicht aus der Übung.
Ob ich derartiges auch mal in meine Klassen und Objekte einbaue, weiss ich
noch nicht. Aber ich probiere ja gerne mal rum...
Gruß
André
Also ich finde es gräßlich. In jedr seiner Klassenmethoden $this
zurückgeben zu müssen.
Aber wie schon oft gesagt, wers mag...
Viele Grüße
> On 4 Dez., 10:56, Andre Schmidt <andre.schm...@trash-mail.com> wrote:
>
>> [Fullquote gesnipt]
Bitte beschr�nke Dich beim Zitieren auf das Notwendige. Und Deine etwas
lange Einleitungszeile k�nnte auch eine Abmagerungskur vertragen.
> Also ich finde es gr��lich. In jedr seiner Klassenmethoden $this
> zur�ckgeben zu m�ssen.
In _jeder_ Klassenmethode w�re das auch ziemlich unsinnig. Aber in
solchen, die ansonsten nichts zur�ckzugeben haben (z.B. Setter), kann es
durchaus sinnvoll sein.
Gru�. Claus
Bei einem Setter hielte ich es fuer naheliegender, den neu gesetzten
Wert zurueckzugeben:
| $a = $b->setC($d);
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike
Stefan - niemand fasst kompetenter oder auch schleifender.
(Sloganizer)
> On Sat, 05 Dec 2009 17:27:22 Claus Reibenstein wrote:
>
>>> Also ich finde es gräßlich. In jedr seiner Klassenmethoden $this
>>> zurückgeben zu müssen.
>>
>> In _jeder_ Klassenmethode wäre das auch ziemlich unsinnig. Aber in
>> solchen, die ansonsten nichts zurückzugeben haben (z.B. Setter), kann es
>> durchaus sinnvoll sein.
>
> Bei einem Setter hielte ich es fuer naheliegender, den neu gesetzten
> Wert zurueckzugeben:
>
> | $a = $b->setC($d);
Zu welchem Zweck?
Gruß. Claus
Fuer Konstruktionen wie:
| $a = $b = $c->setD($d);
Das ist IMHO noch weiter verbreiteter Stil, als:
| $e->f($f)->g($g)->h($h);
Wobei ich persoenlich keine der beiden Varianten mag und daher auch
keine der beiden verwende.
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike
Genuss im Dröhnen der Motoren: Stefan!
(Sloganizer)