isso é chamado de encadeamento de métodos e é feito retornando uma referência à classe ( $this ), ou outro objeto de classe dessas funções. Então você pode chamar um método no objeto retornado.
Aqui está um exemplo simples.
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();
saída:
'hello'
Só para explicar um pouco mais, o código acima
$a->bar('hello')->out();
é aproximadamente equivalente a fazer isso: $a = new foo();
$b = $a->bar('hello'); //$a and $b are the same instance of the object
$b->out();
Agora porque
bar()
retorna $this
poderíamos atribuí-lo a $b
como acima e então chame out()
. Mas $a
e $b
ambos referenciam a mesma instância do foo
objeto, porque retornamos $this
de bar()
. Portanto, não há necessidade dessa variável "espúria" extra, pois podemos apenas referenciar o objeto de retorno diretamente para a próxima chamada. Isso funciona com qualquer objeto que é retornado de um método (não apenas $this), mas obviamente a próxima chamada na cadeia é contra o objeto retornado.