O problema provavelmente é que
$this->phone
está vazio quando você executa a consulta. Nesse caso, a consulta será
SELECT * FROM [...] OR WHERE phone LIKE '%%'
que sempre retornará tudo. Solução:deixe de fora os critérios de telefone se não forem fornecidos ou (alerta de hack! ) use um valor que nunca ocorrerá nessa coluna.
Outra maneira de fazer isso é alterar a consulta para algo como
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
E então vincule
:phone_provided
para 1 se $this->phone
é definido, 0 caso contrário. Da mesma forma com :name_provided
.