Hi!
Mir fällt da lediglich print ein, das wie eine Funktion verwendet werden kann (aber nicht muss).
include() oder require() lassen sich mit und ohne Klammern verwenden ;)
Die Klammern haben da den selben Effekt wie bei $x = (1 + 1); oder $foo = ("bar"); Sie sind im Grunde genommen sinnlos, bilden jedoch aus programmtechnischer Sicht einen separat zu berechnenden Ausdruck.
Um was es mir allgemein ging: jegliche Sprachkonstrukte tun so (mit den genannten Ausnahmen) als wären sie Funktionen.
Diese Aussage ist für "jegliche Sprachkonstrukte" nicht richtig. Welche Ausnahmen hast du denn bisher genannt?
include und require nebst den _once-Varianten, die ein Ergebnis zurückliefern können, verhalten sich nicht wie man es von einer Funktion erwarten würde. (Siehe Beispiel 4 der include-Doku). Sie können nicht mit Klammern verwendet werden, aber ihr Argument kann geklammert werden - das ist der Unterschied zu Funktionen und zu Sprachkonstrukten, die wie Funktionen verwendet werden können oder müssen.
Daraus könnte man ableiten, dass Sprachkonstrukte prinzipiell ohne Klammern aufgerufen werden könnten, das stimmt aber nicht und könnte zu problemen führen.
Man könnte auch aus 1+1=2 ableiten, dass 2+2 ebenfalls 2 ergibt. Oder anders: Man kann immer falsche Schlüsse ziehen.
Darum auch meine Antwort auf Gunnars Aussage:
BTW, echo ist keine Funktion; du kannst auch echo "Fehler!"; schreiben.
Daraus könnte man ebenfalls - ohne genauere Recherche - ableiten, dass man bei "Dingen die keine Funktion sind" keine Klammern braucht oder man sie ohne konsequenzen Hinzufügen kann.
Was du so alles aus nicht vorhandenen Aussagen ableiten kannst.
Mein Beispiel sollte zeigen, dass das aber im Fall von print() sehrwohl einen Unterschied macht. Wenn plötzlich irgendwo eine 1 dasteht und niemand weiß warum, könnte sowas die Ursache sein. Es soll ja Spaßvögel gebe, die aufgrund von irgendwelchen absonderlichen CGL sämtliche Vorkommen von echo durch print ersetzen oder umgekehrt.
Wer solche einfachen Fehler macht und sie nicht einmal nach Lektüre der Handbuchseiten findet, sollte sich <del>ein anderes Hobby suchen</del><ins>im Recherchieren üben</ins>.
eval(), unset(), isset() oder empty() sind ebenfalls Sprachkonstrukte und müssen wie Funktionen verwandt werden - da läuft nix ohne Klammern.
Die sind mir zu meiner vorigen Antwort nicht eingefallen, sei's drum. Diese sind jedenfalls wie Funktionen zu verwenden, und die Klammern gehören zum Funktionsaufruf.
echo hat aber die Ausnahme, dass es sich als einziges (?) Sprachkonstrukt mit Klammern nicht wie eine Funktion verhält und keinen Rückgabewert liefert. Das führt dann zu einer Fehlermeldung. Nebest dessen kann man echo mit mehreren Argumenten aufrufen ohne Klammern zu verwenden und es tut dennoch, als wäre es eine Funktion.
Nein, echo ist keine Funktion, tut auch nicht so und kann deshalb nicht wie eine verwendet werden. Wenn da Klammern verwendet werden, dann fassen diese Ausdrücke zusammen, so wie bei (1+1)*2.
Warum auch immer im PHP-Handbuch echo und die includes wie Funktionen dargestellt werden ... bei echo ist sogar die Syntaxzeile falsch (auch wenn das im folgenden Absatz nochmal verbal korrigiert wird):
void echo ( string $arg1 [, string $... ] )
echo (1,2,3) liefert einen schönen Syntaxfehler.
Wenn also jemand - aus welchem grund auch immer ein "echo print('foo');
" durch ein "echo echo('foo');
" ersetzt (siehe oben) wird's eine Fehlermeldung geben.
Es gibt noch mehr <del>sinnlose</del><ins>undurchdachte</ins> Aktionen, die zu Fehlermeldungen führen. Zu Sprachkonstrukten lässt sich lediglich aussagen, dass sie ihre (dokumentierten) Eigenheiten haben, die manchmal aber nicht immer in anderen Elementen von PHP wiedergefunden werden können.
Lo!