| layout | guide | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| permalink | /jumpto/if/ | ||||||||||||||||||||||||||||
| title | if | ||||||||||||||||||||||||||||
| group | Code-Optimierung | ||||||||||||||||||||||||||||
| creator | hausl | ||||||||||||||||||||||||||||
| author |
|
||||||||||||||||||||||||||||
| inhalt |
|
||||||||||||||||||||||||||||
| entry-type | in-discussion |
Zuerst sei ein oft vorkommender Mythos aufgeklärt:
- Es gibt keine
if-Schleifen. - Es gibt keine
if-Schlaufen.
Das Wesen einer Schleife ist die Wiederholung. if bildet einen Block aus Anweisungen und Ausdrücken.
if ist eine Kontrollstruktur aber deshalb noch lange keine Schleife.
Die korrekte Notierung gemäß PEAR Standard beschreibt die Angabe immer mit Klammern.
Beispiel
if (Bedingung1) {
Aktion1;
} elseif (Bedingung2) {
Aktion2;
} else {
Standardaktion;
}Die übliche Darstellung entspricht somit entweder / oder
if (!empty($_POST['action'])) {
$action = $_POST['action'];
} else {
$action = 'standard';
}Eine alternative, etwas kürzere Variante, mit Wert-Vorbelegung und Übersteuerung, wenn die Bedingung zutrifft.
$action = 'standard'; // Initiale Vorbelegung
if (!empty($_POST['action'])) {
$action = $_POST['action'];
}Eine weitere alternative Darstellungsweise ist der Trinitäts Operator, auch Ternärer Operator genannt. Dieser bietet sich ins Besondere an, wenn es nur ein entweder / oder gibt. Sollte mehr als das nötig sein (elseif, ...), kann diese Variante jedoch sehr schnell unübersichtlich werden. Hier empfiehlt es sich oft zur herkömmlichen Variante zu greifen.
(Bedingung) ? Aktion1 : Standardakion;Beispiel entspricht den oberen beiden:
$action = (!empty($_POST['action'])) ? $_POST['action'] : 'standard';Anmerkung: Die Klammerung der Bedingung im Trinitäts Operator ist nicht nötig, wird jedoch der besseren Lesbarkeit empfohlen.
if ($ampel = "gruen") {
echo "Go!";
}Nur ein = Zeichen ist eine Zuweisung und würde immer als true gewertet. Zum direkten Vergleich sind zwei == oder drei === Zeichen nötig. Details dazu zum Thema typschwacher und typsicherer Vergleich gibt es ebenfalls hier.
Nur die erste Zeile nach dem if wird als Aktion behandelt. Die nächste Zeile nicht mehr, diese wird immer ausgeführt. Zur besseren Lesbarkeit wird von dieser Notaiton abgeraten, diese findet auch im PEAR Standard keine Anwendung.
Negativbeispiel
if ($ampel == "gruen")
echo "Na endlich!"; // nur diese Zeile wird gem if ausgeführt
echo "Go!"; // diese Zeile wird immer(!) ausgeführtDas Audruck in der Klammer ( ) nach dem if wird direkt immer zu true oder false ausgewertet. Mit diesem Hintergrundwissen fällt auf, das es oft unnötige Anwendungen des if Konstruktes gibt.
Beispiel, eine Prüfung ob ein User Volljährig ist, könnte so aussehen:
if ($userAge >= 18) {
$userIsAdult = true;
} else {
$userIsAdult = false;
}Da die Bedigung ($userAge >= 18) bereits true oder false zurückgibt, wäre die für diese Fall ausreichend:
$userIsAdult = ($userAge >= 18);Anmerkung: Die Klammerung der Bedingung ist nicht nötig, wird jedoch der besseren Lesbarkeit empfohlen.