suit: Regulärer Ausdruck

Beitrag lesen

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 ;)

Um was es mir allgemein ging: jegliche Sprachkonstrukte tun so (mit den genannten Ausnahmen) als wären sie Funktionen. In der PHP-Doku von print() ist aber folgendes zu lesen:

"print() is not actually a real function (it is a language construct) so you are not required to use parentheses with its argument list."

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.

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.

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.

eval(), unset(), isset() oder empty() sind ebenfalls Sprachkonstrukte und müssen wie Funktionen verwandt werden - da läuft nix ohne Klammern.

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.

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.