Métodos de encadeamento em PHP

Todos os garotos legais estão usando o encadeamento de métodos atualmente. Para quem não sabe o que é encadeamento de método, ele se parece um pouco com isto:

$foo = new Foo;
$foo
->bar()->output();

Parece muito melhor do que duas chamadas separadas, sim? Aqui está um exemplo de implementação de uma classe simples minha do Gravatar:

public function SetEmail($email = '')
{
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$this
->email = md5(strtolower(trim($email)));
}

return $this;
}

É simples – tudo o que precisamos fazer é garantir que retornemos $ this no final de nossos métodos que desejamos poder encadear.