tomu se říká řetězení metod a provádí se vrácením odkazu na class( $this ) nebo jiný objekt třídy z těchto funkcí. Potom můžete volat metodu na vráceném objektu.
Zde je jednoduchý příklad.
class foo{
protected $_bar;
public function bar($value){
$this->_bar = $value;
return $this;
}
public function out(){
echo $this->_bar;
}
}
$a = new foo();
$a->bar('hello')->out();
výstup:
'hello'
Abychom to trochu více vysvětlili, výše uvedený kód $a->bar('hello')->out();
je zhruba ekvivalentní provedení tohoto:
$a = new foo();
$b = $a->bar('hello'); //$a and $b are the same instance of the object
$b->out();
Nyní, protože bar()
vrátí $this
mohli bychom to přiřadit $b
jako výše a poté zavolejte out()
. Ale $a
a $b
oba odkazují na stejnou instanci foo
objekt, protože jsme vrátili $this
z bar()
. Není tedy potřeba tato další "falešná" proměnná, protože můžeme pouze odkazovat na návratový objekt přímo pro další volání. Funguje to s libovolným objektem, který je vrácen z metody (nejen $this), ale samozřejmě pak je další volání v řetězci proti vrácenému objektu.