Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Kontrollstrukturen in PHP
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 08.12.2004, 16:56 Nach oben    #1
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

Diese FAQ-Beitrag wurde geschrieben von: Jann Hendrik



Kontrollstrukturen in PHP

1. Schleifen
2. Bedingungen

Was sagt das Handbuch zu Kontrollstrukturen?
deutsch
englisch

Geändert von Jann Hendrik (15.07.2007 um 15:13 Uhr) Grund: links an aktuelle Struktur angepasst
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 10:30 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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 />';
?>

Geändert von Jann Hendrik (25.05.2007 um 10:12 Uhr) Grund: links an aktuelle Struktur angepasst
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 19:32 Nach oben    #3
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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.

Geändert von Jann Hendrik (25.05.2007 um 10:12 Uhr) Grund: links an aktuelle Struktur angepasst
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 19:49 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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.

Geändert von Ben (04.11.2005 um 03:54 Uhr)
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 21:26 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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.

Geändert von Jann Hendrik (25.05.2007 um 10:13 Uhr) Grund: links an aktuelle Struktur angepasst
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 21:27 Nach oben    #6
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

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.')';
?>

Geändert von Jann Hendrik (14.12.2005 um 09:33 Uhr)
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 21:28 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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!

Geändert von Jann Hendrik (25.05.2007 um 10:14 Uhr) Grund: links an aktuelle Struktur angepasst
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2004, 21:28 Nach oben    #8
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard [PHP] Kontrollstrukturen in PHP

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.
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] vCard PHP Parser Jann Hendrik Tutorials 0 22.08.2007 10:24
[PHP] Mit PHP dynamisch einen RSS-Feed aktualisieren Jann Hendrik Tutorials 0 13.03.2007 09:52
PHP 5.1.5, PHP 4.4.4 und PHP 5.2.0 RC2 veröffentlicht Ben Nachrichten 2 01.09.2006 16:05
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
[PHP] Erstellung und Bearbeitung von Bildern mittels PHP WarrenFaith Tutorials 1 23.08.2005 15:30


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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