
if-Anweisung
switch-Anweisung
elseif-Anweisung
Zu bedingten Anweisungen, also den if-Bedingungen,
gibt es eigentich nichts zu sagen. PHP folgt hier dem gleichen
Schema wie alle anderen Programmiersprachen. Der einfachste
Fall sieht so aus.
<?
if(1)
{
print "hallo 1";
}
if(true)
{
print "hallo 2";
}
if(false)
{
print "nix 3";
}
if (0)
{
print "nix 4";
}
if(undef)
{
print "nix 5";
}
if("Andres Ehmann")
{
print "hallo 6";
}
if(-1)
{
print "hallo 7";
}
if($modul)
{
print "hallo 8";
}
?>
Es erscheint hallo 1, hallo2,nix 5 und
hallo 6. Die Bedingung undef entspricht also in PHP dem Wert
true. Bei Perl gilt undef als falsch, was dazu führt,
das die bedingte Anweisungen in Perl nicht abgearbeitet wird.
PHP sieht das anders, undef ist irgendwas was nicht gerade
0 oder false ist, und das wird als true gewertet. Praxisrelevant
ist dieses Konstrukt.
<?
if($modul)
{
print "hallo 8";
}
?>
Die Variable ist noch nicht vorhanden
an der Stelle. Das bewirkt, dass die die Bedingung false ist
und folglich "hallo 8" nicht gedruckt wird. So was
kann man ab und an mal gebrauchen. Ähnlich sieht es aus
mit einem Array, der entweder noch gar nicht initialisiert
wurde, oder keine Werte hat.
<?
$banane=array();
if($banane)
{
print "bin zwar da aber leer";
}
?>
Auch hier ist die if Bedingung nicht
true. Es erscheint nichts. Mit dem Ausrufezeichen lässt
sich der Wert, der in den Klammern stehen in sein Gegenteil
verkehren.
<?
$banane=array();
if(!$banane)
{
print "bin zwar da aber leer";
}
?>
Jetzt erscheint "bin zwar da aber
leer" auf dem Bildschirm. Der Normalfall sieht wohl eher
anders aus. Im Normalfall werden zwei Werte miteinander verglichen.
<?
$variable1=4;
$variable2=12;
if($variable1 <=$variable2)
{
print "$variable1 ist kleiner als $variable2";
}
?>
Es erscheint das, was man erwartet, "4
ist kleiner als 12". Ansonsten sind hier als Operatoren
all die Dinge zugelassen, die man aus der Mathematik so kennt
<,>,>=,<=,==,!=. Ein kurzes Sinnen macht nur bei
den Operatoren Sinn, die auf Gleicheit == bzw. Ungleichheit
!= prüfen. PHP unterscheidet hier nicht zwischen nummerischen
Variablen (Zahlen) und string Variablen (Zeichenketten). Beide
lassen sich mit == bzw. != verzichten. Perl macht hier Unterschiede,
PHP nicht.
<?
$variable1=4;
$variable2=4;
if($variable1 == $variable2)
{
print "Variable1 ist genauso gross wie Variable2";
}
?>
Mit dem gleichen Operator kann man auch
Zeichenketten auf Gleichheit überprüfen.
<?
$variable1="Andrés";
$variable2="Andrés";
if($variable1 == $variable2)
{
print "Variable1 hat den gleichen Wert wie Variable2";
}
?>
Manchmal will man auch prüfen, ob
mehrere Bedingungen zutreffen, bzw. eine davon.
<?
$variable1=4;
$variable2=4;
$variable3="Andrés";
$variable4="Andrés";
if($variable1 == $variable2 && $variable3 == $variable4
)
{
print "Das && steht für logisches und, also
beide Bedingungen müssen zutreffen";
}
?>
In diesem Fall ist die Bedingung true,
weil beide Bedingungen true sind. Man kann die Bedingung aber
auch so formulieren, dass es reicht, dass eine Bedingung true
ist, damit der ganze Ausdruck true ist.
<?
$variable1=4;
$variable2=222;
$variable3="Andrés";
$variable4="Andrés";
if($variable1 == $variable2 || $variable3 == $variable4 )
{
print " Die doppelte Pipe || steht für logisches
oder,".
"also eine der beiden Bedingungen muß zutreffen";
}
?>
Man kann auch mit der Situation konfrontiert
sein, dass man mehrere Gruppen hat, von der eine Gruppe als
ganzes true sein muss, damit der ganze Ausdruck true ist.
<?
$variable1=4;
$variable2=4;
$variable3="Andrés";
$variable4="Andrés";
$variable5=true;
$variable6=false;
if(($variable1 == $variable2 && $variable5) || ($variable3
== $variable4 && $variable6))
{
print "Der erste Block ist in seiner Gesamtheit false,
der zweite true,".
" da sie mit oder verknüpft sind, ist der gesamte
Ausdruck true";
}
?>
Anstatt && kann man auch and,
anstatt || auch or schreiben.
<?
$variable1=4;
$variable2=4;
$variable3="Andrés";
$variable4="Andrés";
$variable5=true;
$variable6=false;
if(($variable1 == $variable2 and $variable5) or
($variable3 == $variable4 and $variable6))
{
print "Statt && kann man and, statt || kann man
or schreiben.";
}
?>
Das funktionniert auch. Nun ist klar,
dass es eine Möglichkeit geben muss, dem Programm mitzuteilen,
was es machen soll, wenn die if Bedingung falsch ist.
<?
$variable1=4444444;
$variable2=4;
$variable3="Andrés";
$variable4="Andrés";
$variable5=true;
$variable6=false;
if(($variable1 == $variable2 and $variable5) or
($variable3 == $variable4 and $variable6))
{
print "Statt && kann man and, statt || kann man
or schreiben.";
}
else
{
print "Hopla jetzt komm ich ";
}
?>
Die obige Bedingung als Satz würde lauten,
wenn das eintritt, tue dies und wenn nicht, jenes. Die Verhältnisse
können aber auch komplizierter sein, so dass es lauten
müsste, wenn das eintritt, tue dies, wenn das eintritt,
jenes, wenn das eintritt jenes etc. Das realisiert man dann
mit switch, mit mehrere if Schleifen hintereinander oder mit
elseif, wobei elseif wohl flexibler ist als switch.
<?
$variable=500;
switch($variable)
{
case 200:
{
$summe=$variable/5;
print "Der Wert der Summe ist 40 <br>";
}
case 500:
$summe=$variable/100;
print "Der Wert der Summe ist 5<br>";
case 1000:
$summe=$variable/1000;
print "Der Wert der Summe ist 10<br>";
}
?>
Die switch Anweisung kann verwendet werden,
wenn eine Variable mehrere Werte annehmen kann und in Abhängigkeit
von diesen Werten unterschiedliche Dinge passieren wollen.
Allerdings arbeitet die switch Anweisung nicht nur den Block
nach der zutreffenden case Anwendungen ab, sonder auch alle
folgenden. Oben stehender Skript führt also zu diesem
Ergebnis.
Der Wert der Summe ist 5
Der Wert der Summe ist 10
Wenn man das nicht will, muss man ein
break setzen. Dann wird nach der case Bedingung, die wahr
ist, die weitere Verarbeitung abgebrochen.
<?
$variable=500;
switch($variable)
{
case 200:
{
$summe=$variable/5;
print "Der Wert der Summe ist 40 <br>";
}
case 500:
$summe=$variable/100;
print "Der Wert der Summe ist 5<br>";
case 1000:
$summe=$variable/1000;
print "Der Wert der Summe ist 10<br>";
}
?>
Das gleiche geht natürlich auch
mit Zeichenketten.
<?
$variable=Euro;
switch($variable)
{
case DM:
{
print "Gibt keine DM mehr<br>";
}
case Franc:
print "Französische Franc gibt es auch nicht mehr<br>";
break;
case Euro:
print "Gibt nur noch Euros<br>";
break;
}
?>
Nun kann es sein, dass auch eine Situation
eintritt, bei der keine case Anweisung zutrifft. In dieser
Situation macht es Sinn, einen default zu definieren, der
dann aufgerufen wird, wenn keine case Anweisung ausgeführt
werden kann.
<?
$variable=Peseta;
switch($variable)
{
case DM:
{
print "Gibt keine DM mehr<br>";
}
case Franc:
print "Französische Franc gibt es auch nicht mehr<br>";
break;
case Euro:
print "Gibt nur noch Euros<br>";
break;
default:
print "Wahrscheinlich auch so eine Währung, die
es nicht mehr gibt";
}
?>
Das man das gleiche auch mit ein paar if-Anweisungen
hätte erreichen können, ist klar. Es gibt noch eine
dritte Alternative elsif. Diese Variante ist zwar in diesem
konkreten Fall mehr Schreibarbeit, ist aber flexibler. Das
gleiche nochmal mit einer elseif Anweisung.
<?
$variable=Euro;
if ($variable == "DM")
{
print "Gibt keine DM mehr<br>";
}
elseif($variable =="Franc")
{
print "Französische Franc gibt es auch nicht mehr<br>";
}
elseif($variable =="Euro")
{
print "Gibt nur noch Euros<br>";
}
else
{
print "Wahrscheinlich auch so eine Währung, die
es nicht mehr gibt";
}
?>
Man beachte den Unterschied zu Perl. In
Perl heisst es elsif und nicht elseif. Flexibler ist das,
weil jetzt nicht nur der Wert einer Variablen ausgwertet werden
kann, sondern beliebige komplexe Bedingungen gesetzt werden
können.
|
 |