• Kontrollstrukturen in PHP

    1. Schleifen
    • for
    • foreach
    • while
    • do .. while

    2. Bedingungen
    • if, elseif, else
    • switch
    • ternärer Operator


    Was sagt das Handbuch zu Kontrollstrukturen?
    deutsch
    englisch

    1. for

    Schleifen scheinen jedem Programmieranfänger am Anfang kompliziert. Daher wollen wir uns Diese hier mal näher anschauen.

    Code:
    for (ausdruck_a; ausdruck_b; ausdruck_c)
    {
      Anweisung
    }
    
    PHP bearbeitet die Schleife nun folgendermaßen. ausdruck_a wid zum Beginn der Schleife ausgeführt. Somit werden die ersten Fakten geschaffen. Aber die Anweisung in der Schleife wurde noch nicht begonnen! Nur, wenn ausdruck_b richtig (TRUE) ist wird die Anweisung in der Schleife gestartet. Hier liegt also das Geheimnis, wie man die Schleife beenden kann. Man muss nur versuchen an der gewünschten Stelle ausdruck_b falsch (FALSE) zu bekommen. Das kann man regeln, da zu jedem Ende ausdruck_c geprüft/ausgeführt wird.

    Also noch mal im Ablauf:
    1. ausdruck_a wird ausgeführt
    2. wenn ausdruck_b gleich TRUE, also wahr beginnt die Schleife
    3. ausdruck_c wird ausgeführt/geprüft

    Anmerkung:
    - Jeder Ausdruck könnte auch leer sein, aber dazu kommen wir später.
    - Jeder Ausdruck wird durch ein Semikolon getrennt, damit PHP die einzelnen Ausdrücke unterscheiden kann.

    Und nun ein einfaches Beispiel:
    PHP-Code:
    <?php
      
    for($i=0;$i<17;$i=$i+1)
      {
        echo 
    $i.'<br />';
      }
    ?>
    Erklärung:
    Die Variable $i wird gleich 0 gesetzt. Die for-Schleife überprüft, ob der Wert der Variable $i kleiner als 17 ist, wenn ja, dann wird die Schleife ausgeführt, wenn nicht - dann logischerweise nicht. mit jeder erfolgreich durchgelaufenen Schleife wird die Variable $i um 1 erhöht.
    Der Wert der Variablen wird ausgegeben. Damit die einzelnen Werte noch unterscheidbar sind, wird ein Zeilenumbruch mit ausgegeben.

    Profis würde es noch kürzer schreiben, aber es geht hier ersteinmal darum zu verstehen, wie die for-Schleife funktioniert.

    Ich habe erwähnt, dass man jeden Ausdruck auch leer lassen könnte. Das scheint erst einmal sinnlos, aber es gibt Fälle (da es ja funktioniert), da macht es Sinn.

    Die for-Schleife lässt sich nämlich auch mit einem
    Code:
    break;
    
    beenden.
    Wenn nun also in der for-Schleife eine Überprüfung stattfindet (z.B. mit der if-Kontrollstruktur), so lässt sich gezielt die Schleife beenden.
    Wenn nämlich angenommen der ausdruck_c leer ist, so würde PHP der Meinung sein, dass die Bedingung für die Ausführung der Schleife immer TRUE ist und die Schleife ewig ausführen. Eine Endlosschleife währe programmiert. Mit einem gezielten break könnte man dann die Schleife beenden.
    ausdruck_a lässt sich auch außerhalb der Schleife definieren, natürlich vorher. Und ausdruck_c, welcher zum Ende der Schleife ausgeführt wird, kann man auch in der Schleife definieren.

    Beispiel:
    PHP-Code:
    <?php
    $i
    =0;
    for(;;)
    {
      
    // wenn $i groß genug, dann Schleife beenden:
      
    if($i>35)
      {
        break;
      }
      
    $i $i+1;
    }
    ?>
    Anmerkung:
    - wenn die Schleife nur eine Anweisung enthält:
    Code:
    for(...;...;...)
    {
      Anweisung   // <###
    }
    
    Dann kann man die Klammern { und } auch weglassen. Wenn aber mehr als nur eine Anweisung folgen sollen, dann muß diese unbedingt dort stehen!
    Gleiches gilt auch für die if-Kontrollstruktur.

    Damit könnte man das erste Beispiel so abkürzen:
    PHP-Code:
    <?php
      
    for($i=0;$i<17;$i=$i+1)
        echo 
    $i.'<br />';
    ?>

    2. foreach
    mit foreach ist es möglich in einem Array zu arbeiten.
    Lies dazu auch:
    Was sind eigentlich Arrays?

    Mit foreach ist es möglich ein Array zu durchlaufen.

    Dafür erstellen wir uns zunächst ein Array, um es gleich zu zeigen, wie es funktioniert:
    PHP-Code:
    <?php
      $array_name 
    = array('eins''zwei''drei''vier''und''so''weiter');
    ?>
    die Ausgabe erfolgt mit foreach. Hier wird jedes Element des Array durchlaufen und ausgegeben:
    PHP-Code:
    <?php
      $array_name 
    = array('eins''zwei''drei''vier''und''so''weiter');

      foreach (
    $array_name as $wert_des_array)
        echo 
    'Wert: '.$wert_des_array.'<br />\n';
    ?>
    die Ausgabe sieht dann wie folgt aus:
    Code:
    Wert: eins
    Wert: zwei
    Wert: drei
    Wert: vier
    Wert: und
    Wert: so
    Wert: weiter
    
    Wenn nun noch interessiert, das wievielte Element nun welchen Wert hat - dem sei noch gesagt, dass es hierfür eine kleine Erweiterung gibt:
    PHP-Code:
    <?php
      $array_name 
    = array('eins''zwei''drei''vier''und''so''weiter');

      foreach (
    $array_name as $wert_des_array => $value)
        echo 
    'Schlüssel: '.$wert_des_array.'; Wert: '.$value.'<br />'."\n";
    ?>
    die Ausgabe sieht dann wie folgt aus:
    Code:
    Schlüssel: 0; Wert: eins
    Schlüssel: 1; Wert: zwei
    Schlüssel: 2; Wert: drei
    Schlüssel: 3; Wert: vier
    Schlüssel: 4; Wert: und
    Schlüssel: 5; Wert: so
    Schlüssel: 6; Wert: weiter
    
    Dieses Konstrukt kann z.B. dann hilfreich sein, wenn man den Warenkorb eines Shops mit Arrays gestalten möchte. So kann man das Array beliebig erweitern und anschließend das kompl. array ausgeben, oder durchsuchen.


    3. while
    Die while-Schleifen sind die einfachste Form von Schleifen in PHP.

    Die Grundform einer while-Anweisung lautet:
    Code:
    while (ausdruck) Anweisung
    
    Der Ablauf bei dieser Schleifenform ist dabei einfach. Bevor die Schleife ausgeführt wird, wird überprüft, ob der ausdruck richtig (TRUE) ist. Wenn ja, so wird die Schleife exakt einmal durchlaufen (Anweisung wird ausgeführt) und anschließend geht das Spiel von vorne los.
    Die Schleife wird solange und so oft ausgeführt, wie der ausdruck TRUE ist.
    Sollte der ausdruck innerhalb der Schleife geändert werden, so wird die Schleife dennoch bis zum Ende ausgeführt.
    Da die while-Schleife stets vor dem Durchlaufen prüft, ob ausdruck TRUE ist, kann es also auch vorkommen, dass die Schleife gar nicht ausgeführt wird.

    Nun aber mal ein Beispiel:
    PHP-Code:
    <?php
     $i 
    1;
     while (
    $i <= 10
     {
       echo 
    $i.'<br />';
       
    $i++;  // das gleiche wie $i=$i+1;
     
    }
    ?>
    Anmerkung:
    in 1: wird die Variable $i definiert.
    in 2: die Schleife wird gestartet, sofern $i kleiner oder gleich 10 ist
    in 3: mit der Klammer startet die Schleife. Bei nur einer Anweisung in der Schleife können die beiden Klammern { und } wegfallen
    in 4: Ausgabe von $i
    in 5: die Variable $i wird um 1 erhöht
    in 6: Schleife wird beendet.

    Man die while-Schleife auch noch ein wenig tricky verwenden, aber dies deckt den Normalfall ab.


    4. do .. while
    die do...while - Schleife funktioniert ähnlich der while-Schleife mit dem wesentlichen Unterschied, dass diese Schleife mindestens einmal ausgeführt wird, da hier erst zum Ende des Durchlaufes überprüft wird, ob sie ein weiteres Mal durchlaufen soll.

    Hier mal ein Beispiel:
    PHP-Code:
    <?php
      $i 
    0;
      do
      {
        
    $i++;
        echo 
    $i.' Zeile<br />';
      }
      while (
    $i<10);
    ?>
    Anmerkung:
    In diesem Beispiel wird lediglich von 1 bis 10 gezählt.


    5. if, elseif, else

    if
    mit der if-Kontrollstruktur habt ihr die Möglichkeit dynamisch zu werden! Es wird geprüft, ob der Ausdruck in der Klammer nach if wahr ist, und wenn ja, dann wird die folgende Anweisung ausgeführt. Andernfalls nicht.
    Beispiel:
    PHP-Code:
    <?php
      $a 
    1;
      
    $b 3;
      
      if(
    $a $b)
        echo 
    '';
    ?>
    Die Ausgabe ist dann:

    Wie ihr seht, ist die Ausgabe leer - logisch!

    Man könnte nun folgendes erweitern:
    PHP-Code:
    <?php
      $a 
    1;
      
    $b 3;

      if(
    $a $b)
        echo 
    '$a ('.$a.') ist größer als $b ('.$b.')';

      if(
    $a $b)
        echo 
    '$a ('.$a.')ist kleiner als $b ('.$b.')';
    ?>
    Aber schön ist es nicht gerade. Daher erweitern wird das ganze.

    else
    Mit dem Beispiel von eben ergibt sich daraus folgendes. Es wird geprüft, ob die Bedingung wahr ist und andernfalls wird PHP den else-Abschnitt - sofern verfügbar - ausführen.

    PHP-Code:
    <?php
      $a 
    1;
      
    $b 3;

      if(
    $a $b)
        echo 
    '$a ('.$a.') ist größer als $b ('.$b.')';
      else
        echo 
    '$a ('.$a.') ist kleiner als $b ('.$b.')';
    ?>
    Die Ausgabe sieht in diesem Falle dann so aus:
    Code:
    $a ist kleiner als $b
    
    Anmerkung:
    normal wäre die Blöcke nach if und else mit den Klammern { und } einzugrenzen. Hier konnte darauf verzichtet werden, da nur eine Zeile folgte.

    elseif
    Wenn wir nun das Beispiel ändern, so wird keine der beiden Bedingungen erfüllt sein.
    PHP-Code:
    <?php
      $a 
    3;
      
    $b 3;

      if(
    $a $b)
        echo 
    '$a ('.$a.') ist größer als $b ('.$b.')';
      else
        echo 
    '$a ('.$a.') ist kleiner als $b ('.$b.')';
    ?>
    Hier hilft uns die 'Erweiterung' um elseif weiter. Hier klann sozusagen bei jedem else um eine weitere Bedingung geprüft werden.

    PHP-Code:
    <?php
      
    if ($a $b)
        echo 
    '$a ('.$a.') ist größer als $b ('.$b.')';
      elseif (
    $a == $b)
        echo 
    '$a ('.$a.') hat den gleichen Wert wie $b ('.$b.')';
      else 
        echo 
    '$a ('.$a.') ist kleiner als $b ('.$b.')';
    ?>

    6. switch

    Mit switch besteht in PHP die Möglichkeite abhängig vom Wert einer Variable verschiedene Anweisungen zu starten.

    Zwar wäre dies auch mit dem elseif-Konstrukt möglich, aber mit switch ist es noch einfacher.

    Hier ein Beispiel:
    PHP-Code:
    <?php
      $i 
    2;
      switch (
    $i
      {
        case 
    0:
          echo 
    '$i ist gleich 0';
          break;
        case 
    1:
          echo 
    '$i ist gleich 1';
          break;
        case 
    2:
          echo 
    '$i ist gleich 2';
          break;
      }
    ?>
    Erklärung:
    Für den Fall, dass $i gleich 0 ist, so wird der erste echo-Befehl ausgeführt und die switch-Anweisung beendet (wegen des break). Andernfalls wird geprüft, ob einer der weiteren case-Bedingungen zutrifft.

    Für den Fall, dass die Variable $i den Wert 3 gehabt hätte, so wäre keine der echo-Befehle ausgeführt.
    switch kann um einen default-Wert erweitert werden, wenn keine der Fälle eintritt, so wird die default-Anweisung ausgeführt:
    PHP-Code:
    <?php
      $i 
    10;
      switch (
    $i
      {
        case 
    0:
          echo 
    '$i ist gleich 0';
          break;
        case 
    1:
          echo 
    '$i ist gleich 1';
          break;
        case 
    2:
          echo 
    '$i ist gleich 2';
          break;
        default:
          echo 
    '$i ist stimmt mit keinem der Fälle überein.';
      }
    ?>
    Anmerkung:
    Das beenden der switch-Anweisung bei default ist logischerweise nicht mehr möglich.

    Nun könnte man durch das Weglassen von break-Befehlen dafür sorgen, dass folgender Code funktioniert:
    PHP-Code:
    <?php
      $i 
    3;
      switch (
    $i
      {
        case 
    0:
          echo 
    '$i ist gleich 0';
        case 
    1:
          echo 
    '$i ist gleich 1 oder kleiner';
        case 
    2:
          echo 
    '$i ist gleich 2 oder kleiner';
        case 
    3:
          echo 
    '$i ist gleich 3 oder kleiner';
        case 
    4:
          echo 
    '$i ist gleich 4 oder kleiner';
        case 
    5:
          echo 
    '$i ist gleich 5 oder kleiner';
        case 
    6:
          echo 
    '$i ist gleich 6 oder kleiner';
        case 
    7:
          echo 
    '$i ist gleich 7 oder kleiner';
        case 
    8:
          echo 
    '$i ist gleich 8 oder kleiner';
      }
    ?>
    Viel Sinn macht dieses Beispiel in dieser Form zwar nicht, aber ggf. habt ihr in der Praxis das fehlende break im Hinterkopf!

    7. ternärer Operator
    Infos im PHP-Handbuch findet ihr hier:
    http://de3.php.net/manual/de/control...ive-syntax.php

    es gibt ja die Möglichkeit der Fallunterscheidung mit if-else:
    PHP-Code:
    <?php 
     $case 
    TRUE;
     if(
    $case)
      {
        echo 
    'Fall 1';
      }
      else
      {
        echo 
    'Fall 2';
      }
    ?>
    das ist eine Möglichkeit. Aber das gibt es auch kürzer.

    kurz: wenn der Ausdruck in der Klammer wahr ist, dann ausdruck_1 ausgegeben, sonst ausdruck_2:
    PHP-Code:
    <?php 
     $case 
    TRUE;
      echo (
    $case)?"ausdruck_1":"ausdruck_2";
    ?>
    Der ternärer Operator läßt sich zum Beispiel prima benutzen, wenn man ein Formular abschickt und die Daten vor der Verarbeitung überprüft - sollte das Formular dann nicht vollständig ausgefüllt sein, dann kann man zur Formulareingabe zurückspringen auf auf die Existenz von $_POST-Variablen prüfen und - sofern vorhanden gleich als default-Wert eintragen, so dass der user das nicht jedes Mal erneut machen muß, wenn er das Forumular nicht sachgemäß ausgefüllt hat.
  • Neue Blog-Einträge

    Adventure-PHP-Framework 1.12 erschienen

    Ich bin bisher nicht dazu gekommen - und wollte eigentlich die beiden links nennen: :arrow: http://www.golem.de/1008/77097.html :arrow:...

    20.08.2010 16:09

    Britische Regierung hält am IE6 fest

    Man könnte auch sagen "Tot erhoffte leben länger" :arrow: http://www.golem.de/1008/77035.html Leider sind halt in vielen Unternehmen speziell an den IE angepasste Programme im Einsatz, die es...

    20.08.2010 16:12

    Hosting-Dienst GitHub erreicht Millionen-Marke

    Während ich persönlich noch immer gerne SVN einsetze, ist git gerade voll im Trend. GitHub hatte die Tage zu vermelden, dass es mehr als eine Million Softwareprojekte "unter seinem Dach" hat....

    20.08.2010 16:15

    Screenshot unter Windows vom aktiven Fenster erstellen

    Der Trend, nicht nur einen Bildschirm bei der Arbeit am PC zu verwenden ist imho vorhanden. Wer - wie ich - gerne zwischendurch einen screenshot macht, der dürfte sich ggf. manches Mal geärgert...

    20.08.2010 16:20

    ListView-Spalten Automatisch ausrichten

    Listviews begegnen uns eigentlich jeden Tag aufs neue bei der täglichen Arbeit. Genauso oft nervt es, wenn man z.b. im Explorer Spalten verschieben muss, um einen Dateinamen einer Datei vollständig...

    24.08.2010 13:10
  • Neue Beiträge

    Sekundentakt

    Hi,

    ich weiß nicht genau, wie Deine Subselects aussehen. Aber falls die sich so ähnlich formulieren lassen:

    Code:
    SELECT something
    

    CONCAT_WS mit LEFT JOIN

    Sekundentakt 01.09.2010 15:30 Gehe zum letzten Beitrag
    DasMööp

    *ohje ... Antwort: Subselect *rolleye, damit fällt dann der JOIN weg.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 13:29 Gehe zum letzten Beitrag
    DasMööp

    Hallo,

    bei einer Abfrage von zwei Tabellen ist in einer in zwei Spalten je die ID der einen hinterlegt und diese brauche ich in der CONCAT.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 12:17 Gehe zum letzten Beitrag
    floppy

    Hallo DEVWinC, Hallo Spezialisten,

    ich stehe zur Zeit auf dem gleichen Problem, bei mir gibts beim BartPE (XP) nur einen BlueScreen nach

    [Booten] ISO-Images mit Bootloader starten & BartPE

    floppy 31.08.2010 10:48 Gehe zum letzten Beitrag

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48