heinetz: Zuweisung und ODER

Hallo Forum,

ich frage mich gerade, ob es soetwas wie eine verkürzte Zuweisung gibt.

$res = NULL;
$a = "x";
$b = "y";
$c = "z";

Ich möchte gerne, dass $res den Wert von $c annimmt, wenn $c belegt ist, den Wert von $b annimmt, wenn $b, aber nicht $c belegt ist und den Wert von $a annimmt, wenn $b und $c nicht bekegt sind. Das kann man atürlich mit switch oder if/else-Konstruktionen lösen, aber ich stelle mir etwas vor, dass etwa so
aussehen könnte:

$res = ($a||$b||$c);

Das funktioniert so natürlich nicht, aber gibt es vielleicht etwas eleganteres als if/else oder switch?

danke für Tipps und

beste gruesse,
heinetz

  1. Hallo,

    $res = NULL;
    $a = "x";
    $b = "y";
    $c = "z";

    Ich möchte gerne, dass $res den Wert von $c annimmt, wenn $c belegt ist,

    was verstehst Du unter $c ist belegt?

    den Wert von $b annimmt, wenn $b, aber nicht $c belegt ist und den Wert von $a annimmt, wenn $b und $c nicht bekegt sind. Das kann man atürlich mit switch oder if/else-Konstruktionen lösen,

    Das funktioniert so natürlich nicht, aber gibt es vielleicht etwas eleganteres als if/else oder switch?

    ? :

    Freundliche Grüße

    Vinzenz

    1. ? :

      Bei zwei Zuständen ist der Trinäre-/Ternäre-Operator ok - bei drei möglichen Zuständen muss man ihn aber bereits verschachteln, das schränkt die Lesbarkeit bereits enorm ein - hier würde ich eher eine weniger elegante Lösung mit einer gewöhnlichen Verzweigung "ein paar Zeilen" darüber empfehlen :)

      1. Hallo suit,

        ? :

        Bei zwei Zuständen ist der Trinäre-/Ternäre-Operator ok - bei drei möglichen Zuständen muss man ihn aber bereits verschachteln, das schränkt die Lesbarkeit bereits enorm ein - hier würde ich eher eine weniger elegante Lösung mit einer gewöhnlichen Verzweigung "ein paar Zeilen" darüber empfehlen :)

        da stimme ich Dir aus ganzem Herzen zu: Lesbarkeit geht vor kryptischer Eleganz.

        Freundliche Grüße

        Vinzenz

  2. Hallo,

    Ich möchte gerne, dass $res den Wert von $c annimmt, wenn $c belegt ist, den Wert von $b annimmt, wenn $b, aber nicht $c belegt ist und den Wert von $a annimmt, wenn $b und $c nicht bekegt sind. Das kann man atürlich mit switch oder if/else-Konstruktionen lösen, aber ich stelle mir etwas vor, dass etwa so aussehen könnte:

    $res = ($a||$b||$c);

    in Javascript würde dieses Konstrukt leisten, was du beschreibst - allerdings in umgekehrter Reihenfolge: Da würde bevorzugt $a zugewiesen; falls nicht definiert, dann $b, zuletzt $c. PHP interpretiert den ODER-Operator aber als rein boolschen Operator, da wird dieser Ausdruck immer nur true oder false liefern.

    Aber der Fragezeichen-Operator in Verbindung mit isset() könnte dir weiterhelfen.

    Ciao,
     Martin

    --
    "Wie geht eigentlich dein neues Auto?"
    "Es geht nicht, es fährt!"
    "Äh, ja. Und wie fährt es?"
    "Och, es geht."
    1. Hi,

      in Javascript würde dieses Konstrukt leisten, was du beschreibst - allerdings in umgekehrter Reihenfolge: Da würde bevorzugt $a zugewiesen; falls nicht definiert, dann $b, zuletzt $c.

      genau, weil ich das Konstruk letztens irgendwo gesehen habe,
      dachte ich daran, ob es soetwas ähnliches in php auch gibt.
      Die verkürzte if ist mir bekannt.

      beste gruesse,
      heinetz

  3. $a = 'x';  
    $b = false;  
    $c = Null;  
      
    if (($res = $c) OR ($res = $b) OR ($res = $a)) {  
     echo $res;  
    }
    

    so?