Werbung einblenden Werbung ausblenden


Home / Tutorials / PHP Handbuch / Bedingte Anweisungen


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-Anweisung

<?
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.

switch-Anweisung

<?
$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.

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.

vorhergehendes Kapitel