Hi!
eval(), unset(), isset() oder empty() sind ebenfalls Sprachkonstrukte und müssen wie Funktionen verwandt werden - da läuft nix ohne Klammern.
Diese sind jedenfalls wie Funktionen zu verwenden, und die Klammern gehören zum Funktionsaufruf.
da stellt sich die Frage: Was unterscheidet sie dann von Funktionen? Sie bekommen eine in Klammern stehende Parameterliste, die ein oder mehrere Elemente enthält, und sie tun etwas mit diesen Argumenten und ermitteln daraus ein eindeutig bestimmtes Ergebnis (okay, unset() ist mit Ergebnistyp void definiert). Das qualifiziert sie für mich als Funktion.Ja, aus der Sicht sehen sie aus und verhalten sich wie Funktionen. Allerdings haben echte PHP-Funktionen noch mehr Verwendungsmöglichkeiten, wie die Verwendbarkeit als Callback, aufrufbar mit einigen der Function Handling Functions und als Variable Functions. (Das hatte suit übrigens schon erwähnt.)
Dazu fällt mir grad noch ein, warum unset(), isset() und empty() Sprachkonstrukte und keine Funktionen sind. Bei einer Funktion könnte man auch auch andere Ausdrücke als Argument übergeben, nicht nur Variablennamen. Und während bei einer Funktion (außer bei Objekten) der Wert des Ausdrucks per Kopie übergeben wird, was bei Variablen nur ihr Inhalt ist, wird für zumindest unset() der Variablenname benötigt, denn diese Variable soll ja vollständig verschwinden und nicht nur genullt werden oder ähnliches (wofür im Prinzip eine Referenz reichte).
Für isset() und empty() könnte es theoretisch reichen, nur eine Kopie des Wertes zu übergeben, denn isset() liefert auch bei vorhandenen Variablen mit dem Inhalt null ein false als Ergebnis, und empty() liefert für eine nicht vorhandene Variable das gleiche Ergebnis wie für die Inhalte null, 0, '', etc. Weil nicht vorhandene Variablen beim Auslesen null zurückliefern, könnten diese beiden den Variablenwert auch per Kopie übergeben bekommen. Allerdings, und das ist der Unterschied zu Funktionen, wird keine Notice-Meldung erzeugt.
Für Funktionen werden die als Parameter übergebenene Ausdrücke zuerst berechnet und anschließend die Funktion aufgerufen. Bei dieser Berechnung werden auch Zugriffe auf nicht vorhandene Variablen mit der Notice-Meldung bedacht. Die Sprachkonstrukte unset(), isset() oder empty() gehen also nicht den Weg der normalen Funktionsverarbeitung sondern arbeiten direkt mit den Variablennamen.
Lo!