Autor Zpráva
Metr
Profil *
mám jednu takovou otázku jak vytvořit třeba v oop

$class->hledat('hledany_vyraz')->seradit('ASC')->vypsat();

abych nemusel třeba dělat

$class->hledat('hledany_vyraz');
$class->seradit('ASC');
$class->vypsat();

díky
Mastodont
Profil
Ty metody (function) musí vracet $this.
MzM
Profil
Metr, operátor "->" se aplikuje na objekt a zpřístupňuje tak metodu nebo vlastnost tohoto objektu.
když vezmu tvůj příklad, tak hledat() by muselo vracet objekt, seradit() by muselo vracet objekt a pak by to šlo takto zapsat.
Jinak se to v 99,9% případů dělá tak, jak to píšeš na ty tři řádky.
Mastodont
Profil
http://dikini.net/fluent_interfaces_method_chaining
error414-
Profil *

class Trida{

function hledat('nazev'){
$this->nazev = $nazev;
return $this;
}

function seradit('$seradit;'){
$this->seradit = $seradit;
return $this;
}

function vypsat(){
// neco to udela
}
}
MzM
Profil
jinými slovy totéž....
error414-
Profil *
MzM jj je to to tez ja te chtel jenom doplnit. Jinak ja take redeji nastavuji na tri radky.






$class->hledat('hledany_vyraz')
->seradit('ASC')
->vypsat();
MzM
Profil
OK, teď to zkouším, a nějak mi to nechodí. Pokud přes fci vrátím $this, tak další reference se zuřivě brání. Pro dokreslení:

tohle nefunguje (Parse error: parse error, unexpected T_OBJECT_OPERATOR na tomhle řádku)
$obj->jmeno('toto')->a();

toto funguje (stejný objekt $obj.)
$x = $obj->jmeno('toto');
$x->a();

kde dělám chybu?
error414-
Profil *
MzM


$obj->jmeno('toto')->a(); 
funguje jen v php5. V php4 nedovolene pouziti "->" za ")";
MzM
Profil
Aha, já jsem si myslel, že v tom bude nějaký vyšší zádrhel, díky.
Metr
Profil *
díky všem,
chci se ještě zeptat, není to zbytečné nechat si vracet celé $this?
nebude to moc náročné na paměť? nebo si jen předávat referenci by bylo lepší?
llook
Profil
Náročné na paměť to nebude, v PHP5 se objekty předávají podobně jako reference.
Toto téma je uzamčeno. Odpověď nelze zaslat.