function()->function()

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

function()->function()

Beitrag 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
OnFire
Mitglied
Beiträge: 207
Registriert: 26.07.2006 18:59
Wohnort: Paderborn
Kontaktdaten:

Beitrag von OnFire »

Versuchs mit

Code: Alles auswählen

echo $test->test1($test->test2($test->test3($test->test4('text'))));
;)
Gruß
OnFire
Il y a plus des choses à changer dans l'avenir que dans le passé.
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag von Arzee »

so functioniert es, aber ich wollte den script verkürzen. ist ja alles in der selben klasse.
OnFire
Mitglied
Beiträge: 207
Registriert: 26.07.2006 18:59
Wohnort: Paderborn
Kontaktdaten:

Beitrag 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
Gruß
OnFire
Il y a plus des choses à changer dans l'avenir que dans le passé.
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag 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();
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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).
KB:knigge
Arzee
Mitglied
Beiträge: 23
Registriert: 17.06.2007 14:34

Beitrag 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
Antworten

Zurück zu „Coding & Technik“