Sven Rautenberg: Logikfrage zu der "Bedingung ? Wahr : Falsch" Synthax?

Beitrag lesen

Moin!

Ich habe eigentlich dauernd das Problem, dass die "Bedingung ? Wahr : Falsch"  Syntax bei mir nicht funktioniert.

Du mußt es richtig anwenden... :)

if ($breite > $hoehe)   {
$faktor = $breite / 100;
}  else  {
$faktor = $hoehe / 100;
}
funktioniert.

($breite > $hoehe) ? $faktor = $breite / 100 : $faktor = $hoehe / 100;
funktioniert nicht, aber wieso?

Der ?:-Operator liefert dir einen Wert zurück. Der Operator ist wie eine Funktion zu verwenden.

Dein Beispiel würde sich funktionsfähig ergeben als:

$faktor = ( ($breite>$hoehe) ? $breite/100 : $hoehe/100 );

Die Einklammerungen mache ich gewohnheitsmäßig. Die Klammer ganz außenrum sichert, dass nur der enthaltene Ausdruck wirklich ausgewertet wird (insbesondere wären in komplexeren Ausdrücken ansonsten Anfang und Ende schwer abgrenzbar). Und die Klammer um Wahrheits-Vergleiche mache ich auch automatisch.

Der ?:-Operator kann in komplexeren Ausdrücken verwendet werden!

Beispiel:

$faktor = $faktor * ($test<10?5:2);

Dieser Ausdruck multipliziert $faktor mit einem zweiten Wert. Ist $test kleiner als 10, wird mit 5 multipliziert, andernfalls mit 2.

Der ?:-Operator kann auch verschachtelt werden.

Mit diesem Operator kann man sich aufwendige if-Verschachtelungen wesentlich einfacher machen, wenn diese tatsächlich zur Vereinfachung geeignet sind. Insbesondere wenn man klassisch vor einer Berechnung diverse Abfragen macht, um Werte vorzudefinieren, ist der ?:-Operator eine gute Alternative.

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|