dedlfix: switch mit preg_match

Beitrag lesen

Hi!

Du möchtest nicht $var2 (konvertiert zu 0) mit den Ergebnissen der preg_matches vergleichen sondern das Ergebnis, das preg_match im Erfolgsfall liefert, soll mit dem switch-Ausdruck übereinstimmen.
joar, dann hat sich das eh erledigt mit switch, da der switch auch
case 'foo': tuwas(); beinhaltete.

Du kannst trotzdem switch verwenden, wenn es dich nicht stört, dass du grad die übliche Notationsweise umgedreht hast. Normalerweise nimmt man ja

switch (variable/ausdruck)
    case konstanter_wert_1:
    case konstanter_wert_2:

PHP erlaubt auch den umgedrehten Weg, der aber weniger üblich ist, weil er auch nicht in allen Systemen, die switch kennen, so funktioniert.

switch (konstanter_wert)
    case variable_1/ausdruck_1:
    case variable_2/ausdruck_2:

Das ergibt dann bei dir sinngemäß:

switch (1)
    case preg_match(checkbox, $var):
    case preg_match(radio, $var):
    case 'foo' == $var:

Im dritten Fall liefert der Vergleich true = 1 oder false = 0 und passt oder nicht. An dieser Stelle muss man sich dann doch in der einen Sorte der Ausdrücke der Typkonvertierung zwischen Integer und Boolean bedienen.

Da Strings typstark auch True sind, würde er alles liefern.

Typstark (eigentlich typsicher) bedeutet, dass der Typ berücksichtigt wird und damit 'foo' !== true ist. switch arbeitet aber nicht mit typsicher.

Selbst wenn nicht, dann wüsste switch ja nicht, womit es 'foo' vergleichen sollte.

Na doch, es ist ja definiert, dass switch seinen Klammerausdruck mit den Ergebnissen der case-Ausdrücke vergleicht. Das Problem ist nicht das switch, sondern es so anzuwenden, dass es das gewünschte Ergebnis liefert. (Bei dieser Lösung wird es auf ungewöhnliche Weise verwendet, was man zurecht bedenklich finden kann, weil es wegen seiner Ungewöhnlichkeit schwerer verständlich ist.)

Lo!