PHP-Anweisungen: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „ = Bedingte Anweisung = Es kommt oft vor, dass eine Berechnung von Bedingungen abhängt: Beispiel: Bestimmen des Maximums von zwei Zahlen a und b: * Wenn a größer als b ist, ist das Ergebnis a. * Sonst ist das Ergebnis b. In PHP wird das so formuliert: <syntaxhighlight lang="php"> if ($a > $b){ $result = $a; } else { $result = $b; } </syntaxhighlight> * Eine bedingte Anweisung beginnt mit dem Wort '''if''. * Es folgt eine in Klammer geschriebene…“) |
|||
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
* [[Kategorie:Tutorial]] | |||
* [[Kategorie:Programmierung]] | |||
* [[Kategorie:PHP]] | |||
= Links = | |||
* [[PHP]] | |||
* [[PHP-Funktionen]] | |||
* [[PHP-Anweisungen]] | |||
* [[PHP-Arrays]] | |||
* [[PHP-Klassen]] | |||
= Bedingte Anweisung = | = Bedingte Anweisung if = | ||
Es kommt oft vor, dass eine Berechnung von Bedingungen abhängt: | Es kommt oft vor, dass eine Berechnung von Bedingungen abhängt: | ||
Zeile 16: | Zeile 25: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* Eine bedingte Anweisung beginnt mit dem Wort '''if''. | * Eine bedingte Anweisung beginnt mit dem Wort '''if'''. | ||
* Es folgt eine in Klammer geschriebene Bedingung: <code>( $a > $b )</code>. | * Es folgt eine in Klammer geschriebene Bedingung: <code>( $a > $b )</code>. | ||
* Es folgt ein mit '{' und '}' umschlossener Block von Anweisungen, die bei Erfüllung der Bedingung ausgeführt werden. Hier genau eine Anweisung: <code>$result = $a;</code> | * Es folgt ein mit '{' und '}' umschlossener Block von Anweisungen, die bei Erfüllung der Bedingung ausgeführt werden. Hier genau eine Anweisung: <code>$result = $a;</code> | ||
Zeile 23: | Zeile 32: | ||
Wenn wir das noch in eine Funktion verpacken, dann ist das wiederverwertbar: | Wenn wir das noch in eine Funktion verpacken, dann ist das wiederverwertbar: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
function max($a, $b){ | function max(float $a, float $b): float{ | ||
if ($a > $b){ | if ($a > $b){ | ||
$result = $a; | $result = $a; | ||
Zeile 37: | Zeile 46: | ||
* Schreibe eine Funktion, die eine Zahl prüft, ob sie positiv ist. Wenn sie nicht positiv ist, soll der Text "Zahl ist nicht positiv!" ausgeben. | * Schreibe eine Funktion, die eine Zahl prüft, ob sie positiv ist. Wenn sie nicht positiv ist, soll der Text "Zahl ist nicht positiv!" ausgeben. | ||
* Schreibe eine Funktion, die eine Zahl prüft, ob sie zwischen 0 und 100 liegt. Wenn sie nicht im Intervall liegt, soll sie den Text "keine Prozentzahl" ausgeben. | * Schreibe eine Funktion, die eine Zahl prüft, ob sie zwischen 0 und 100 liegt. Wenn sie nicht im Intervall liegt, soll sie den Text "keine Prozentzahl" ausgeben. | ||
* Schreibe eine Funktion, die eine Anzahl m bekommt (Gleitpunktzahl). Sie soll die je nach Größe als km, m oder mm ausgeben | |||
= Die for-Schleife = | |||
In einer Schleife werden Anweisungen wiederholt, bis eine Bedingung erreicht ist. | |||
<syntaxhighlight lang="php"> | |||
for ($no = 3; $no > 0; $no = $no - 1){ | |||
echo "Noch $no Sekunde(n)\n"; | |||
sleep(1); | |||
} | |||
echo "Ich bin fertig\n"; | |||
</syntaxhighlight> | |||
* Eine for-Schleife beginnt mit dem Wort '''for'''. | |||
* Es folgen 3 Abschnitte, die jeweils mit ';' (Strichpunkt) getrennt sind: | |||
** Der erste Abschnitt ist die '''Initialisierung''', die vor dem Schleifendurchlauf einmal erledigt wird: Die Variable $no erhält den Wert 10. | |||
** Der 2.te Abschnitt ist die '''Bedingung''': Wenn die Bedingung "wahr" ist, wird der '''Schleifenrumpf''' durchlaufen. | |||
** Der 3.te Abschnitt ist die '''Fortschaltung''': Sie wird am Ende des Schleifenkörpers ausgeführt: <code>$no = $no - 1</code> zählt die Variable $no um eins herunter. | |||
** Der Schleifenkörper beginnt hier mit '{', enthält 2 Anweisungen <code>echo "Noch $no Sekunden\n"; sleep(1000);</code> und endet mit '}'. | |||
== Der Programmablauf == | |||
* Die Schleifeninitalisierung wird gemacht: <code>$no = 3;</code> | |||
* Es folgt die Prüfung: <code>$no > 0;</code>: $no hat den Wert 3, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: | |||
* <code>echo "Noch $no Sekunden\n"; sleep(1000);</code>: Es wird ausgegeben: "Noch 3 Sekunde(n)" und ein Zeilenwechsel. | |||
* Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt: <code>$no = $no - 1;</code>: $no wechselt von 3 auf 2. | |||
* Es folgt die Prüfung: <code>$no > 0;</code>: $no hat den Wert 2, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: | |||
* <code>echo "Noch $no Sekunden\n"; sleep(1000);</code>: Es wird ausgegeben: "Noch 2 Sekunde(n)" und ein Zeilenwechsel. | |||
* Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt: <code>$no = $no - 1;</code>: $no wechselt von 2 auf 1. | |||
* Es folgt die Prüfung: <code>$no > 0;</code>: $no hat den Wert 1, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: | |||
* <code>echo "Noch $no Sekunden\n"; sleep(1000);</code>: Es wird ausgegeben: "Noch 1 Sekunde(n)" und ein Zeilenwechsel. | |||
* Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt: <code>$no = $no - 1;</code>: $no wechselt von 1 auf 0. | |||
* Es folgt die Prüfung: <code>$no > 0;</code>: $no hat den Wert 0, also ist die Bedingung nicht wahr: der Schleifenrumpf wird nicht mehr durchlaufen. | |||
* Es wird die Anweisung nach dem Schleifenrumpf <code>echo "Ich bin fertig\n";</code> ausgeführt: es erscheint die Ausgabe "Ich bin fertig" mit Zeilenwechsel. | |||
== Aufgaben == | |||
* Schreibe eine Funktion, die eine gegebene Anzahl Sterne ausgibt. | |||
* Schreibe eine Funktion, die in Zeile 1 einen Stern ausgibt, in Zeile 2 2 Sterne ... bis eine gegebene Anzahl erreicht ist | |||
* Zeichne einen Tannenbaum | |||
<pre> | |||
* | |||
* * | |||
* * | |||
******** | |||
</pre> | |||
= Die abweisende Schleife "while" = | |||
Die abweisende Schleife prüft die Bedingung vor dem Durchlauf des Schleifenrumpfes. | |||
Wir bauen die obige For-Schleife als While-Schleife nach: | |||
<syntaxhighlight lang="php"> | |||
$no = 3; | |||
while($no > 0){ | |||
echo "Noch $no Sekunde(n)\n"; | |||
sleep(1); | |||
$no = $no - 1; | |||
} | |||
echo "Ich bin fertig\n"; | |||
</syntaxhighlight> | |||
== Der Seerosenteich == | |||
Aufgabe: Ein Seerosenblatt hat 10cm*10 cm Fläche. Eine Seerose verdoppelt sich jeden Tag. Wie lange dauert es, bis der Teich mit 100m*100m zugewachsen ist, wenn am Anfang 64 Seerosen existieren. | |||
<syntaxhighlight lang="php"> | |||
$roses = 64; | |||
$days = 0; | |||
$areaRoses = $roses * 0.1*0.1; | |||
while($areaRoses < 100*100){ | |||
$roses = $roses * 2; | |||
$areaRoses = $roses * 0.1*0.1; | |||
$days = $days + 1; | |||
} | |||
echo "Es gibt $roses Seerosen nach $days Tagen mit einer Fläche von $areaRoses m²\n"; | |||
</syntaxhighlight> | |||
* Die Anfangsfläche ist die Anzahl der Rosen am Anfang (64) mal die Fläche (10cm sind 0.1m): <code>$areaRoses = $roses * 0.1*0.1;</code> | |||
** "Kommazahlen" werden im internationalen Stil mit Punkt statt Komma geschrieben: 0.1 | |||
== Aufgaben == | |||
* Ein Blatt Papier hat 0.1 mm Dicke: Falte das Papier (verdopple die Dicke), bis das Papier 1 m Dicke hat. Gibt die Anzahl der Faltungen aus. | |||
** Falte das Papier, bis es zum Mond reicht: 300 000km. Wieviele Faltungen sind nötig. | |||
* Die Bevölkerung nimmt jedes Jahr 3% ab. Wie lange dauert es, bis sich die Bevölkerung halbiert. | |||
= Die nicht abweisende Schleife do-while = | |||
Wenn der Schleifenrumpf mindestens einmal durchlaufen werden soll, nimmt man die nichtabweisende Schleife: | |||
Der obige Countdown mit einer nicht abweisenden Schleife | |||
<syntaxhighlight lang="php"> | |||
$no = 3; | |||
do { | |||
echo "Noch $no Sekunde(n)\n"; | |||
sleep(1000); | |||
$no = $no - 1; | |||
} while($no > 0); | |||
echo "Ich bin fertig\n"; | |||
</syntaxhighlight> | |||
== Aufgaben == | |||
* Ein Seerosenblatt hat 10cm*10 cm Fläche. Eine Seerose verdoppelt sich jeden Tag. Wie lange dauert es, bis der Teich mit 100m*100m zugewachsen ist. Es gibt am Anfang eine Seerose. | |||
* Ein Blatt Papier hat 0.1 mm Dicke: Falte das Papier (verdopple die Dicke), bis das Papier 1 m Dicke hat. Gibt die Anzahl der Faltungen aus. | |||
** Falte das Papier, bis es zum Mond reicht: 300 000km. Wieviele Faltungen sind nötig. | |||
* Die Bevölkerung nimmt jedes Jahr 3% ab. Wie lange dauert es, bis sich die Bevölkerung halbiert. | |||
= Die Listenschleife foreach = | |||
Um alle Elemente einer Liste zu verarbeiten, kann die '''foreach'''-Schleife benutzt werden: | |||
<syntaxhighlight lang="php"> | |||
foreach(["Eis", "Käse", "Kuchen"] as $item){ | |||
echo "Ich liebe $item.\n"; | |||
} | |||
</syntaxhighlight> | |||
* Der Schleifenrumpf wird sooft ausgeführt, wie es Elemente in der Liste (das sind die "Dinge" zwischen '[' und ']', jeweils mit Komma getrennt) gibt. | |||
* Die Variable nach '''as''' (hier $item) bekommt den Wert des Listenelements. | |||
* Es gibt also 3 Zeilen: | |||
<pre> | |||
Ich liebe Eis. | |||
Ich liebe Käse. | |||
Ich liebe Kuchen. | |||
</pre> | |||
== Aufgaben == | |||
* Gib nach diesem Schema deine Lieblingsfilme aus. |
Aktuelle Version vom 3. November 2023, 20:18 Uhr
Links
Bedingte Anweisung if
Es kommt oft vor, dass eine Berechnung von Bedingungen abhängt:
Beispiel: Bestimmen des Maximums von zwei Zahlen a und b:
- Wenn a größer als b ist, ist das Ergebnis a.
- Sonst ist das Ergebnis b.
In PHP wird das so formuliert:
if ($a > $b){
$result = $a;
} else {
$result = $b;
}
- Eine bedingte Anweisung beginnt mit dem Wort if.
- Es folgt eine in Klammer geschriebene Bedingung:
( $a > $b )
. - Es folgt ein mit '{' und '}' umschlossener Block von Anweisungen, die bei Erfüllung der Bedingung ausgeführt werden. Hier genau eine Anweisung:
$result = $a;
- Optional folgt das Wort else und ein mit '{' und '}' umschlossener Block von Anweisungen, der nur dann ausgeführt wird, wenn die obige Bedingung nicht erfüllt ist.
Wenn wir das noch in eine Funktion verpacken, dann ist das wiederverwertbar:
function max(float $a, float $b): float{
if ($a > $b){
$result = $a;
} else {
$result = $b;
}
return $result;
}
Aufgaben
- Schreibe eine Funktion, die als Parameter das Alter bekommt und dann, wenn das Alter größer 17 ist, den Text "Willkommen" ausgibt, sonst den Text "Leider kein Zutritt!".
- Schreibe eine Funktion, die eine Zahl prüft, ob sie positiv ist. Wenn sie nicht positiv ist, soll der Text "Zahl ist nicht positiv!" ausgeben.
- Schreibe eine Funktion, die eine Zahl prüft, ob sie zwischen 0 und 100 liegt. Wenn sie nicht im Intervall liegt, soll sie den Text "keine Prozentzahl" ausgeben.
- Schreibe eine Funktion, die eine Anzahl m bekommt (Gleitpunktzahl). Sie soll die je nach Größe als km, m oder mm ausgeben
Die for-Schleife
In einer Schleife werden Anweisungen wiederholt, bis eine Bedingung erreicht ist.
for ($no = 3; $no > 0; $no = $no - 1){
echo "Noch $no Sekunde(n)\n";
sleep(1);
}
echo "Ich bin fertig\n";
- Eine for-Schleife beginnt mit dem Wort for.
- Es folgen 3 Abschnitte, die jeweils mit ';' (Strichpunkt) getrennt sind:
- Der erste Abschnitt ist die Initialisierung, die vor dem Schleifendurchlauf einmal erledigt wird: Die Variable $no erhält den Wert 10.
- Der 2.te Abschnitt ist die Bedingung: Wenn die Bedingung "wahr" ist, wird der Schleifenrumpf durchlaufen.
- Der 3.te Abschnitt ist die Fortschaltung: Sie wird am Ende des Schleifenkörpers ausgeführt:
$no = $no - 1
zählt die Variable $no um eins herunter. - Der Schleifenkörper beginnt hier mit '{', enthält 2 Anweisungen
echo "Noch $no Sekunden\n"; sleep(1000);
und endet mit '}'.
Der Programmablauf
- Die Schleifeninitalisierung wird gemacht:
$no = 3;
- Es folgt die Prüfung:
$no > 0;
: $no hat den Wert 3, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: echo "Noch $no Sekunden\n"; sleep(1000);
: Es wird ausgegeben: "Noch 3 Sekunde(n)" und ein Zeilenwechsel.- Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt:
$no = $no - 1;
: $no wechselt von 3 auf 2. - Es folgt die Prüfung:
$no > 0;
: $no hat den Wert 2, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: echo "Noch $no Sekunden\n"; sleep(1000);
: Es wird ausgegeben: "Noch 2 Sekunde(n)" und ein Zeilenwechsel.- Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt:
$no = $no - 1;
: $no wechselt von 2 auf 1. - Es folgt die Prüfung:
$no > 0;
: $no hat den Wert 1, also ist die Bedingung wahr: der Schleifenrumpf wird durchlaufen: echo "Noch $no Sekunden\n"; sleep(1000);
: Es wird ausgegeben: "Noch 1 Sekunde(n)" und ein Zeilenwechsel.- Das Ende des Schleifenrumpfs ist erreicht, die Fortschaltung wird ausgeführt:
$no = $no - 1;
: $no wechselt von 1 auf 0. - Es folgt die Prüfung:
$no > 0;
: $no hat den Wert 0, also ist die Bedingung nicht wahr: der Schleifenrumpf wird nicht mehr durchlaufen. - Es wird die Anweisung nach dem Schleifenrumpf
echo "Ich bin fertig\n";
ausgeführt: es erscheint die Ausgabe "Ich bin fertig" mit Zeilenwechsel.
Aufgaben
- Schreibe eine Funktion, die eine gegebene Anzahl Sterne ausgibt.
- Schreibe eine Funktion, die in Zeile 1 einen Stern ausgibt, in Zeile 2 2 Sterne ... bis eine gegebene Anzahl erreicht ist
- Zeichne einen Tannenbaum
* * * * * ********
Die abweisende Schleife "while"
Die abweisende Schleife prüft die Bedingung vor dem Durchlauf des Schleifenrumpfes.
Wir bauen die obige For-Schleife als While-Schleife nach:
$no = 3;
while($no > 0){
echo "Noch $no Sekunde(n)\n";
sleep(1);
$no = $no - 1;
}
echo "Ich bin fertig\n";
Der Seerosenteich
Aufgabe: Ein Seerosenblatt hat 10cm*10 cm Fläche. Eine Seerose verdoppelt sich jeden Tag. Wie lange dauert es, bis der Teich mit 100m*100m zugewachsen ist, wenn am Anfang 64 Seerosen existieren.
$roses = 64;
$days = 0;
$areaRoses = $roses * 0.1*0.1;
while($areaRoses < 100*100){
$roses = $roses * 2;
$areaRoses = $roses * 0.1*0.1;
$days = $days + 1;
}
echo "Es gibt $roses Seerosen nach $days Tagen mit einer Fläche von $areaRoses m²\n";
- Die Anfangsfläche ist die Anzahl der Rosen am Anfang (64) mal die Fläche (10cm sind 0.1m):
$areaRoses = $roses * 0.1*0.1;
- "Kommazahlen" werden im internationalen Stil mit Punkt statt Komma geschrieben: 0.1
Aufgaben
- Ein Blatt Papier hat 0.1 mm Dicke: Falte das Papier (verdopple die Dicke), bis das Papier 1 m Dicke hat. Gibt die Anzahl der Faltungen aus.
- Falte das Papier, bis es zum Mond reicht: 300 000km. Wieviele Faltungen sind nötig.
- Die Bevölkerung nimmt jedes Jahr 3% ab. Wie lange dauert es, bis sich die Bevölkerung halbiert.
Die nicht abweisende Schleife do-while
Wenn der Schleifenrumpf mindestens einmal durchlaufen werden soll, nimmt man die nichtabweisende Schleife:
Der obige Countdown mit einer nicht abweisenden Schleife
$no = 3;
do {
echo "Noch $no Sekunde(n)\n";
sleep(1000);
$no = $no - 1;
} while($no > 0);
echo "Ich bin fertig\n";
Aufgaben
- Ein Seerosenblatt hat 10cm*10 cm Fläche. Eine Seerose verdoppelt sich jeden Tag. Wie lange dauert es, bis der Teich mit 100m*100m zugewachsen ist. Es gibt am Anfang eine Seerose.
- Ein Blatt Papier hat 0.1 mm Dicke: Falte das Papier (verdopple die Dicke), bis das Papier 1 m Dicke hat. Gibt die Anzahl der Faltungen aus.
- Falte das Papier, bis es zum Mond reicht: 300 000km. Wieviele Faltungen sind nötig.
- Die Bevölkerung nimmt jedes Jahr 3% ab. Wie lange dauert es, bis sich die Bevölkerung halbiert.
Die Listenschleife foreach
Um alle Elemente einer Liste zu verarbeiten, kann die foreach-Schleife benutzt werden:
foreach(["Eis", "Käse", "Kuchen"] as $item){
echo "Ich liebe $item.\n";
}
- Der Schleifenrumpf wird sooft ausgeführt, wie es Elemente in der Liste (das sind die "Dinge" zwischen '[' und ']', jeweils mit Komma getrennt) gibt.
- Die Variable nach as (hier $item) bekommt den Wert des Listenelements.
- Es gibt also 3 Zeilen:
Ich liebe Eis. Ich liebe Käse. Ich liebe Kuchen.
Aufgaben
- Gib nach diesem Schema deine Lieblingsfilme aus.