Da Pinky: if oder switch? meinung gefragt

hallo,

folgendes problem: habe hier daten in einer db, die je nach übergebenem parametern in einer anderen ansicht ausgegeben werden sollen. also wenn ich keinen parameter habe sollen die daten country->state ausgegeben werden, wenn ich einen parameter country habe sollen die daten state->city zu dem entsprechenden parameter ausgegeben werden und wenn ich country und state haben sollen city->kunde ausgegeben werden.
da die daten ja immer mehr werden, je weiter unten man sich in der ebene befindet kann ich schlecht alle auf eine seite pappen.

ich wollte das ganze ja erst so machen:

  
if(!isset($country) && !isset($state) && !isset($city)) {  
 echo listcountrys();  
}  
  
if(isset($country) && !isset($state) && !isset($city)) {  
 echo liststates($country);  
}  

usw.

ist das ne gute lösung oder was empfehlen die leute die php schon länger machen? rein gefühlsmäßig sieht das mit den vielen if() für mich immer irgendwie diletantisch aus, daher wollte ich mal wissen wie ihr das machen würdet? geht switch dafür - in der manual hab ich das immer nur mit einem parameter gesehen...

  1. Hallo,

    ich finde das völlig ok so. Ein Einsatz von switch ist in Deinem Beispiel nicht möglich (und stellt in vielen Fällen auch keine Verbesserung dar).
    Irgendwo mußt Du ja Deine Fallunterscheidungen treffen - und dafür gibt es nun einmal das if-elseif-else-Konstrukt. Ich sehe grundsätzlich nichts Dilettantisches daran, es einzusetzen.

    Du könntest - wenn ich die Logik Deiner Anwendung richtig verstehe - allerdings ein wenig Code sparen:

    if(!isset($country)) {
     echo listcountrys();
    } elseif(!isset($state)) {
     echo liststates($country);
    } else {
     echo listclients($state);
    }

    Ciao,
    Andreas

    1. aus den programmzeilen des posters ist nicht eindeutig zu erkennen, dass es sich um eine fallunterscheidung handelt.
      wenn die bedingung nicht betrachtet wird, können BEIDE fälle ausgeführt werden. das konstrukt schließt nicht das eine oder andere aus.
      so wie du es geschrieben hast, entspricht es einer fallunterscheidung, welche auch als case-konstrukt formuliert werden kann, da hier schon formell zu erkennen ist, dass nur das eine oder andere ausgeeführt werden soll, sich die beiden alternativen also gegenseitig ausschließen.

    2. echo $begrüßung;

      Ein Einsatz von switch ist in Deinem Beispiel nicht möglich

      Obwohl in PHP ein

      switch (true) {
        case bedingung1 or bedingung2: ...
        case !(bedingung or bedingung2): ...
        case bedingung3 and bedingung4: ...
        default: ...
      }

      möglich ist, also berechnete Ausdrücke statt feststehender Werte in den case-Statements vorkommen dürfen, und deine Aussage also nicht stimmt, befürworte ich den Einsatz eines solchen switch-Konstrukts nicht.

      echo "$verabschiedung $name";

      1. Hi,

        switch (true) {
          case bedingung1 or bedingung2: ...
          default: ...
        }

        hoppla, wieder etwas dazugelernt.
        Diese Anwendung des switch-Statements kannte ich noch nicht.

        Ciao,
        Andreas

  2. diese frage wurde hier schon des öfteren gestellt. grundsätzlich gilt: kontrollstrukturen sollten die transparenz erhöhen, also auch die lesbarkeit und unterschwellig auch die gewünschte logik suggerieren.
    es gibt ja in der strukturierten programmierung nach nassi-shneidermann gewollte einsatzbereiche für kontrollstrukturen. sollte es sich um die positive feststellung einer bedingung handeln, ist auf jeden fall ein if-konstukt angebracht. handelt es sich aber logisch gesehen um separate fälle, also fallunterscheidungen, sollte auch ein case-konstrukt benutzt werden.
    noch interessanter und vielfach falsch eingesetzt werden schleifen in ihren variationen, mit eintretender bedingung als while oder do-loop.