esto se denomina encadenamiento de métodos y se realiza devolviendo una referencia a la clase ($this), u otro objeto de clase de esas funciones. Luego puede llamar a un método en el objeto devuelto.
Aquí hay un ejemplo simple.
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();
salida:
'hello'
Solo para explicar un poco más, el código anterior $a->bar('hello')->out();
es más o menos equivalente a hacer esto:
$a = new foo();
$b = $a->bar('hello'); //$a and $b are the same instance of the object
$b->out();
Ahora porque bar()
devuelve $this
podríamos asignarlo a $b
como arriba y luego llamar a out()
. Pero $a
y $b
ambos hacen referencia a la misma instancia de foo
objeto, porque devolvimos $this
desde bar()
. Por lo tanto, no hay necesidad de esta variable "espuria" adicional, ya que solo podemos hacer referencia al objeto de retorno directamente para la próxima llamada. Esto funciona con cualquier objeto que se devuelva desde un método (no solo $this), pero obviamente la siguiente llamada en la cadena es contra el objeto devuelto.