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 :D