BTW, echo ist keine Funktion; du kannst auch
echo "Fehler!";
schreiben.
Als Ergänzung:
Ob Klammern zu verwenden sind oder nicht notwendigerweise etwas damit zu tun, dass es keine Funktion ist - viele Sprachkonstrukte verhalten sich wie Funktionen und wenn sie das tun sollen, braucht man Klammern[1]. Sprich sie sind austauschbar - bis auf die Tatsache dass sich Sprachkonstrukte nicht als Callback verwenden lassen und keine Variablenfunktionen unterstützen, da sie weiter "unten" im Interpreter arbeiten und "vorher" geparst werden.
Dieser Nachteil wird aber dadurch wieder Wett gemacht, dass sie dadurch eben wesentlich schneller sind als funktionen.
Aber zurück zu echo:
echo ist ein Sprachkonstrukte welches sehr sehr "bodennah" operiert und sich deshalb nicht wie eine Funktion verhält.
Oft gibts auch den Irrglauben, echo und print wären in jedem fall austauschbar oder das eine wäre gar ein Alias des anderen, das stimmt aber nicht - während sich print wie eine Funktion verhalten kann, kann echo das nicht.
Beispiel:
<?php
echo print('foo') . 'bar';
// Ausgabe: foobar1
// Rückgabewert von print ist (warum auch immer) in jedem Fall 1
?>
<?php
echo echo('foo') . 'bar';
// Fehler: unexpected T_ECHO, weil sich echo eben nicht wie eine Funktion verhält und als solche auch keinen Rückgabewert besitzt.
?>
<?php
$a = print('foo');
echo "\n\$a is $a";
// funktioniert
?>
<?php
$a = echo('foo');
echo "\n\$a is $a";
// führt wieder zu einer Fehlermeldung
?>
Welchen Praktischen nutzen man aus einem Rückgabewert von print() erhält, erschließt sich mir aber nicht ganz - hier wäre ich über eine Erklärung dankbar.
[1] ich bitte davon abzusehen, dass auch die Typenumwandlung als Sprachkonstrukt zählt :)