Dlaczego błędnie? Jakby to powiedzieć delikatnie... Jeśli wiesz czym się różni ) i } to bedziesz wiedział czemu błąd wystąpił. Porównaj wszystkie zapisy w działaniu:
if($b){$b=false;}else{echo("<hr>");}
($b)?
($b=false):(echo ("<hr>"));
($b)?
{$b=false} : { echo "<hr>" };
($b)?
$b=false : echo "<hr>";
i domyśl, dlaczego pewne są, a inne nie są prawidłowe

@pheter poniżej:
Masz rację. Cytat z manuala do echo:
echo() is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo() (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function. Additionally, if you want to pass more than one parameter to echo(), the parameters must not be enclosed within parentheses.