Der Martin: Regulärer Ausdruck

Beitrag lesen

Moin,

eval(), unset(), isset() oder empty() ...
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.)

ah, stimmt. Daran hatte ich nicht gedacht.

echo (1,2,3) liefert einen schönen Syntaxfehler.
Ich stelle verblüfft fest: Stimmt!
Dabei hätte ich Stein und Bein geschworen, dass PHP den Komma-Operator wie C kennt: Alle Ausdrücke in der Liste der Reihe nach auswerten, und den letzten als Wert des Gesamtausdrucks zurückgeben.
Das Komma ist zwar in der Operatoren-Rangfolge enthalten, allerdings steht dort nur "many uses" als Information.

Hehe, das sagt alles und nichts. ;-)

Als Parametertrenner im Funktionskopf dürfte es nach meinem Dafürhalten nicht als Operator zählen (so wie ; auch nicht als Operator zählt).

Diese Mehrdeutigkeit ist mir auch in C schon aufgefallen: Dort ist das Komma als Operator definiert, dessen Operation darin besteht, den linken Operanden auszuwerten und dann wegzuwerfen, und den rechten als Ergebnis zu liefern. Aber woher "weiß" der Parser, dass der Komma-Operator in Listen -wie etwa in der Parameterliste eines Funktionsaufrufs oder bei Initialisierungswerten für Array oder enums- nicht angewendet werden darf? Innerhalb eines geklammerten Teilausdrucks in so einer Liste dagegen schon? Er hat also schon etwas Geheimnisvolles.

Die einzige andere Anwendung, die mir einfällt wäre bei for, um mehrere Ausdrücke je expr{1..3} ausführen zu können.

Genau da -in Kontrollstrukturen wie z.B. for, seltener auch while- setze ich ihn auch gern ein.

Da müsste das Komma als Operator zählen, obwohl es sich für mich nicht so anfühlt, sondern eher wie ein Syntaxbestandteil à la ;

Ja, mir widerstrebt es auch, das Komma als Operator zu sehen ...

Ciao,
 Martin

--
Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(