Seite 1 von 1
function()->function()
Verfasst: 17.06.2007 14:39
von Arzee
Wie kann ich sowas realisieren?
es sollte eine ausgabe wie diese sein:
echo $test()->test1()->test2()->test3();
eins davon sollte ein text beinhalten welches dann an die andere function übergeben wird. sollte für eine template-classe dienen
Verfasst: 17.06.2007 15:17
von OnFire
Versuchs mit
Code: Alles auswählen
echo $test->test1($test->test2($test->test3($test->test4('text'))));

Verfasst: 17.06.2007 15:23
von Arzee
so functioniert es, aber ich wollte den script verkürzen. ist ja alles in der selben klasse.
Verfasst: 17.06.2007 15:29
von OnFire
Wenn immer alle Funktionen Durchlaufen werden müssen kannst du das ganz einfach verkürzen, indem du innerhalb der Funktion die nächste aufrufst
Verfasst: 17.06.2007 15:35
von Arzee
Nein soll es aber nicht.
Nehmen wir das als Beispiel (welches nicht funktioniert):
Code: Alles auswählen
class css{
function b() { return '<b>'.$this.'</b>'; }
function i() { return '<i>'.$this.'</i>'; }
function txt($txt){ return $txt; }
}
$style = new css();
echo $style->i()->b()->txt('test');
So ähnlich sollte es sein.
Das ist eine Variante die funktioniert, aber die ist mir zu lang und umständlich:
Code: Alles auswählen
class css{
function css($txt) { $this->txt = $txt; }
function b() { $this->txt = '<b>'.$this->txt.'</b>'; }
function i() { $this->txt = '<i>'.$this->txt.'</i>'; }
function out() { return $this->txt; }
}
$style = new css('test');
$style->i();
$style->b();
echo $style->out();
Verfasst: 17.06.2007 16:16
von Pyramide
Die erste Variante kann nicht funktionieren, weil du in den Methoden Strings zurückgibst und keine css-Objekte.
In Java funktioniert folgendes:
Code: Alles auswählen
class css{
function css($txt) { $this->txt = $txt; }
function b() { $this->txt = '<b>'.$this->txt.'</b>'; return this;} }
function i() { $this->txt = '<i>'.$this->txt.'</i>'; return this;} }
function out() { return $this->txt; }
}
echo new css('möp')->b()->i()->out();
Ob das auch in PHP klappt, müsste man testen ( foo()['bar'] funktioniert beispielsweise in PHP nicht, obwohl es in Java möglich ist).
Verfasst: 17.06.2007 16:31
von Arzee
Großen Dank
so hat es funktioniert
Code: Alles auswählen
class css{
function txt($txt) { $this->txt = $txt; return $this; }
function b() { $this->txt = '<b>'.$this->txt.'</b>'; return $this; }
function i() { $this->txt = '<i>'.$this->txt.'</i>'; return $this; }
function out() { return $this->txt; }
}
$style = new css();
echo $style->txt('text')->i()->b()->out();
genau das was ich wollte
