PHP if kürzer?

4 Antworten

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! :)

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
@tavkomann

Man kann doch auch z.b.

case: $bmi < 18.5

Und so weiter machen?

0
@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
$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

1.70 BMI 19 zu dick?

Bei 1.70 und jugendliche ein BMI von 19 - zu dick ? ist BMI 16 zu dünn oder erstrebenswert ? Abnehmpartnerin gesucht <3 (: LG getyougone:)

...zur Frage

Kann man BMI vertrauen, sagt Untergewicht, fühle mich aber dick. Was meint ihr?

Hallo Leute :)

Ich (13, fast 14) weiblich, 165 cm groß und (!!!!) 45 Kilo schwer, habe laut Kinder BMI Rechner, ein BMI von 16.3... also "Untergewicht": Aber- ABER- ich finde mich total dick, und außerdem berühren sich meine Beine fast (ist nur ca. 1 cm Luft!) und ich habe total Bauch fett... mega schlimm :( ich versuche schon seit 3 Monaten abzunehmen, und esse seit ca. 3 Monaten nur noch zwischen 800 - 900 Kcal. Und mache auch (manchmal) extra Sport und so ... hilft im Moment noch nicht wirklich :(

Aber egal, meine Frage ist: Kann man diesem BMI Ding glauben? Manche Leute sagen ja, es sei eine Lüge und so... stimmt mein BMI ("Untergewicht"), obwohl ich mich dick fühle? 

Andere Leute sagen ich bin dünn - normal. aber die wollen, glaub ich, nur höfflich sein ... also, *stimmt das BMI Ding?* Und wenn ja, was ist denn dann mein "Idealgewicht"? Ist bei 40 kg oder so, dachte ich... 42 kg ist mein Ziel...  

Danke für schnelle Antwort! 

Bitte nicht fies sein über mein Gewicht...

...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?