PHP if kürzer?

4 Antworten

Das, was du dort gemacht hast, ist der absolute Worst-Case. Der ternäre Operator sollte, wenn überhaupt, nur sehr sparsam eingesetzt werden und stellt keineswegs eine Alternative zu if/else if/else dar. Verschachtelungen dieses Operators sind äußerst schwer zu durchschauen und sollten deshalb unter keinen Umständen vorkommen.

Was PHP letztendlich macht, ist folgendes:

(Bedingung3) ? "Dick" : "Fett";

// Die Bedingung3 lautet:

(Bedingung2) ? "Normal" : $bmi < 30

// Die Bedingung2 lautet:

(Bedingung1) ? "Dünn" : $bmi < 25

// Die Bedingung1 lautet:

$bmi < 18.5 

Für $bmi == 10 gilt somit:

// Bedingung1:

10 < 18.5

// Bedingung1 ergibt true, also lautet Bedingung2:

true ? "Dünn" : 10 < 25

// Dies entspricht "Dünn".
// Ein nicht-leerer String ist true, also gilt für Bedingung3:

true ? "Normal" : 10 < 30

// Dies entspricht also ebenfalls true,
// also gilt für den Gesamtausdruck

true ? "Dick" : "Fett"

// Ergebnis ist also "Dick" 

Zur Verdeutlichung nun dasselbe mit $bmi == 40:

// Bedingung1:

40 < 18.5

// Bedingung1 ergibt false, also lautet Bedingung2:

false ? "Dünn" : 40 < 25

// Dies entspricht 40 < 25 == false.
// Somit gilt für Bedingung3:

false ? "Normal" : 40 < 30

// Dies entspricht 40 < 30 == false
// Somit gilt für den Gesamtausdruck

false ? "Dick" : "Fett"

// Ergebnis ist also "Fett" 

Also vergiss nicht, Klammern zu setzen, um das gewünschte Verhalten zu erzielen!

echo $bmi < 18.5 ? "Dünn" :
     ($bmi < 25 ? "Normal" :
     ($bmi < 30 ? "Dick" : "Fett")); 

Mach es aber bitte nicht, das ist unübersichtlich und unleserlich, wie du an meiner komplexen Erläuterung schon siehst!

Ok das ist mal gut erklärt!

0

Wollte es ja nur Mal probieren :)

Würdest du eher if Else oder Switch nehmen?

Und danke, also sollte man es nur für simple Sachen ohne Verschachtelung nehmen oder gar nicht?

0
@BrauchJzHilfe

Und danke

Gerne ;)

also sollte man es nur für simple Sachen ohne Verschachtelung nehmen oder gar nicht?

Verschachtelung auf gar keinen Fall. Ich musste auch erst kurz überlegen. Der Code sollte sich aber schnell lesen.

Ansonsten spricht nichts dagegen, es bei offensichtlichen Dingen zu verwenden. Du musst dich einfach selbst fragen: Verstehe ich das nach einem halben Jahr immer noch oder sollte ich lieber if/else verwenden?

Würdest du eher if Else oder Switch nehmen?

Es kommt darauf an. In diesem Fall eignet sich Switch nicht, weil du Vergleiche durchführst. Wenn du aber für einen bestimmten Wert überprüfst, ob er einem anderen entspricht, empfiehlt sich Switch, da es übersichtlicher und sogar etwas performanter ist.

switch (wert) {
  case fall1:
    // code
    break;
  case fall2:
    // code
    break;
  // ...
  default:
    // code
}

Sollte so etwas möglich sein und solltest du mindestens drei Fälle haben, ist m.E. Switch über if/else zu bevorzugen, wobei es darüber auch viele Diskussionen gibt. Es bleibt letztendlich dir überlassen. Beides ist jedenfalls besser als eine Verschachtelung des ternären Operators ;)

2
@BrauchJzHilfe

Tatsächlich kann man das in PHP, aber ich habe das schon vergessen - absichtlich. Denn dann würde innerhalb der Switch-Klammer true stehen, siehe: https://stackoverflow.com/a/24813225/8292104

Das ist einfach nicht mehr der Sinn einer Switch -Anweisung, weshalb eine solche nur irreführend wäre. Setze in diesem Fall also auf if/else, auch wenn dir eine Programmiersprache weitere Möglichkeiten bietet.

1

Da gibt es verschiedene "gute" Lösungen, aber da wir hier ja von PHP reden, sollte der Ansatz auch der Sprache angemessen vermurkst sein! :)

Meine - von JS inspirierte - Idee funktioniert sogar ohne "if", "switch" und Elvis-Operator! Yippie! :)

$bmi = 15;

$res = array();
$bmi < 5 && $res[] = 'leider tot';
$bmi < 18.5 && $res[] = 'abgemagert';
$bmi < 25 && $res[] = 'durchschnittlich';
$bmi < 30 && $res[] = 'relativ weich';
$res[] = 'vermutlich sehr rund';

echo 'Du bist ' . $res[0] . "!\n";

Eigentlich wollte ich noch ein "goto" einbauen, aber irgendwie hat mich heute noch nicht die Muse geküsst. :)

Auf jeden Fall musst du bei der Programmierung in PHP immer schön darauf achten, einem Betrachter deines Codes möglichst viele Falten auf der Stirn zu zaubern! Im PHP Coding Style Guide (PSR-2) wird das sogar zwingend gefordert - neben mindestens einer Sicherheitslücke und drei Anfängerfehlern pro 100 LoC!

Also, dann noch viel Erfolg mit PHP! :)

$bmi = 42;

switch (true) {
case $bmi < 18.5:
echo "dünn";
break;
case $bmi < 25:
echo "Normal";
break;
case $bmi < 30:
echo "Dick";
break;

default:
echo "Fett";
}

Schicke Lösung, aber meine ist noch grauenvoller! :)

2
@TeeTier

Das oben ist übrigens z. B. bei Doctrine zu finden. Oder war es in Symfony? Eins von beiden.

1
@fluffiknuffi2

Das findet man in vielen Projekten. Steht auch in der offiziellen Dokumentation als Beispielcode. :)

0

Php if else andere schreibweise?

Also wenn ich zb eine if abfrage habe und diese wahr ist, dann kommt beispielweise in meiner Anweisung Html code, dann muss man ja immer mit dem echo befehl arbeiten oder mit dem backslash und mit mehrere anführungszeichen, was mich auf dauer nervt. gibt es da einen trick, wo ich in meiner if anweisung normalen html code schreiben kann, ohne diese ganzen backslashes und dem echo befehl

danke

...zur Frage

PHP - $_POST kann nur in echo-befehl als string ausgegeben werden, nicht aber konkateniert

Wenn ich in PHP den inhalt von $POST[name] oder $POST[mail] ausgeben will funktioniert dies nur wenn ich es als String, also so: echo "$POST[mail]"; eingebe so: echo "Von:$POST[name]
"; und so echo .$_POST[mail]; funktioniert es auch nicht.

...zur Frage

Bin ich zu dünn? BMI von 17,5

Ich habe einen BMI von 17,5. Viele sagen zu mir immer so gemeine Sachen wie 'Iss mal mehr!' oder 'Boah bsit du dünn'. Ich fühle mich aber überhaupt nicht zu dünn und meine Oberschenkel sind eigentlich total dick. >.< Soll ich zunehmen ? Und wenn ja wie ?

...zur Frage

ab welchem bmi sieht ma ca. dick aus und wann dünn

ich weis bei jedem ist es ander aber im allgemeinen

...zur Frage

[PHP] If-Abfrage mit Variable in Bedingung?

Hallo,

ich will mit PHP eine IF-Abfrage programmieren, die als Bedingung die Werte die in einer Variable ($example_users) stehen überprüft:

CODE [PHP]

    [...]   
    $example_users = '"user1" or "user2"';
    [...]
    if ( $zeile['username'] == $example_users ){
        echo "richtig";
    }else{
        echo "falsch";
    }
    [...]

Ausgabe mit $zeile['username'] = user1

falsch

Könnt Ihr mir hier weiterhelfen?

Danke

...zur Frage

PHP: mit if-Bedingung neue Seite öffnen

Hi

habe bis jetzt:

        if($_POST["passwort"]=="XYXYXY")
            {
             include 'index.php';
            }
        else
            {
            echo '
            <form action="" method="post">
            <input type="Password" name="passwort">
            </form> ';
            }

nun möchte ich aber nicht include sondern, dass es die den link öffnet.

Vielen Dank für Ratschläge!

...zur Frage

Was möchtest Du wissen?