quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2004/02/28 12:58:39

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Kontrollstukturen

  1. Was sind Kontrollstrukturen?
  2. Der Variablentyp Boolean
  3. Die If-Abfrage
  4. if-else
  5. Der Vergleichsoperator ==

1. Was sind Kontrollstrukturen?

In PHP gibt es die Möglichkeit bestimmte Programmteile nur dann ausführen zu lassen, wenn eine bestimmte Bedingung erfüllt wird. So eine Abfrage macht man mit if. If() ist dabei keine Funktion, es ist eine Programmstruktur, die in PHP immer vorhanden ist.

Die If-Abfrage wird nur dann ausgeführt, wenn die übergebene Bedingung true bzw. wahr ergibt. Und hier kommt ein neuer Variablentyp ins Spiel:

2. Der Variablentyp Boolean

In PHP gibt es einen Variablentyp, der genau 1 Bit Speicher belegt. In diesem Bit kann dann entweder 0 oder 1 stehen. Statt 0 und 1 sagt man auch true bzw. wahr (für die 1) oder auch false bzw. falsch (für die 0).

<?php
    $name
= true;
    
// $name ist vom Typ Boolean und hat den Wert "true"
    
$name2 = false;
    
// $name2 ist vom Typ Boolean und hat den Wert "false"

    // !Achtung!
    
$name3 = "true";
    
// $name3 ist hier vom Typ String mit dem Inhalt "true".
    // Dass im String true steht ist reiner Zufall und
    // hat nix mit dem booleschen Wert "true" zu tun
    
$name4 = "false";
    
// hier gilt das Gleiche.
?>

3. Die If-Abfrage

Der Aufbau der If-Abfrage ist wie folgt.

<?php
    
if (cond)
       
mach_was();
?>

Hier wird die Funktion mach_was(); nur dann aufgerufen wenn die Bedingung cond wahr ist ('cond' ist die Abkürzung von condition, welches übersetzt Bedingung heißt). Möchte man mehrere Funktionen mit einer If-Abfrage steuern, muss man diese Funktionen in geschweiften Klammern zusammenfassen.

<?php
    
if (cond) {
        
mach_was();
        
tu_dies();
        
$x = 2;
        echo
"Der Wert ist: ".$x;
        
$zahl = 20%4;
        
und_das_auch($zahl, 300);
        
// usw.
        // Dies sind willkürliche Funktionsaufrufe und Zuweisungen
        // Sie haben keine Bedeutung
    
}
?>

Hier wird ein ganzer Block von PHP-Funktionen und Zuweisungen durch eine If-Abfrage gesteuert. Innerhalb solch eines Blockes kann wiederum eine If-Abfrage reingeschrieben werden. Diesen Vorgang, If-Abfragen in If-Abfragen schreiben, nennt man Verschachteln.

Lässt man bei dieser If-Abfrage die geschweiften Klammern weg so wird, wie vorher gesagt, nur die 1. Funktion/Zuweisung durch die If-Abfrage kontrolliert. Die anderen Funktionen/Zuweisungen sind nicht von der If-Abfrage abhängig.

<?php
    
if (cond)
        
mach_was();
        
tu_dies();
        
$x=2;
        echo
"Der Wert ist: ".$x;
        
$zahl= 20%4;
        
und_das_auch($zahl,300);
?>

Hier wird nur mach_was(); durch die if-Abfrage gesteuert. Die anderen Funktionen werden unabhängig von der If-Abfrage gesteuert. Lasst euch hier nicht durch die Einrückung irritieren. 'Eigentlich' steht da folgendes:

<?php
    
if (cond)
        
mach_was();
    
tu_dies();
    
$x=2;
    echo
"Der Wert ist: ".$x;
    
$zahl= 20%4;
    
und_das_auch($zahl,300);
?>

Bei der If-Abfrage darf man kein Semikolon verwenden, bzw. kein ; hinter "if (cond)" schreiben. PHP erkennt dies dann als der zu auszuführende Befehl.

<?php
    
if (false);
        echo
"bla";
    
// es wird "bla" ausgegeben
?>

Wenn wir den Quellcode so sehen, ist das vielleicht nicht sofort erkennbar warum hier "bla" ausgeben wird. Doch wenn wir den Code wie folgt formatieren, sieht man warum "bla" ausgegeben wird.

<?php
    
if (false)
        ;
    echo
"bla";
?>

Hier wurde einfach das Semikolon in die nächste Zeile geschrieben und etwas eingerückt. Der echo-Befehl wurde wieder ausgerückt (= das Gegenteil von Einrücken). Jetzt sieht man, dass die if-Abfrage ein ";" ausführt. Ein einfaches ; macht 'nix'. Diese if-Abfrage steuert also einen Befehl, der 'nix' macht, außer vielleicht etwas Rechenzeit zu verbrauchen. Danach ist das if zu Ende und der echo-Befehl wird ganz normal ausgeführt.

4. if-else

Wenn eine Bedingung nicht zutrifft, möchte man ja vielleicht einen alternativen Programmcode bzw. Programmblock ausführen lassen. So eine Programmstruktur verwirklicht man mit if-else.

<?php
    
if (cond)
        
mach_was();
    else
        
mach_was_anderes();

    
// bzw.

    
if (cond) {
        
mach_dies();
        
und_das();
        
und_jenes();
    } else {
        
bla();
        
blu();
    }

    
// Es ist auch möglich das ein Teil eine einzelne Funktion aufruft
    // und der andere Teil ein ganzen Block aufruft
    
    
if (cond)
        
xyz();
    else {
        
// ...
        // ...
    
}

    
// bzw.
    
    
if (cond) {
        
// ...
        // ...
    
}
    else
        
xyz();
?>

Hier wird der else-Teil nur dann ausgeführt, wenn die Bedingung nicht erfüllt wurde.

Nach dem PEAR - Coding Standard soll man immer geschweifte Klammern benutzen, unabhängig davon ob man sie braucht oder nicht. Das erhöht die Lesbarkeit der Quelltexte. Desweiteren sollte man zwischen dem if() und der geschweiften Klammer ein Leerzeichen lassen also so wie man es hier gesehen hat.

5. Der Vergleichsoperator ==

In der If-Abfrage stand jetzt immer cond. Die einfachste Bedingung ist ein Vergleich. Dabei werden 2 Werte miteinander verglichen. Wenn sie den gleichen Wert haben ergibt dies true, wenn nicht logischerweise false. Die Werte die man vergleichen möchte, stehen links und rechts vom ==. So ein Ausdruck liefert dann true oder false.

<?php
    $name
= ("bla" == "bla");
    
// zur besseren Übersicht in 'diesem' Fall sollte man Klammern setzen.
    
echo "Der Wert ist: ".$name;
?>

Hier wird "Der Wert ist: 1" ausgeben. Doch eigentlich sollte ja true ausgegeben werden. Da ist PHP etwas eigen. Bei einer Ausgabe wandelt PHP den Wert true in 1 und false in einen leeren String um. Deswegen sehen wir hier auch die Eins. Intern wird die Variable aber noch als boolescher Werte verarbeitet. Dies zeigt die Funktion var_dump.

<?php
    $name
= ("bla" == "bla");
    
// zur besseren Übersicht in 'diesem' Fall sollte man Klammern setzen.
    
var_dump($name);
?>

Hier wird dann "bool(true)" ausgegeben. Hier sieht man, dass die Variable $name vom Typ bool ist (bool=boolean) und dass sie den Wert true hat.

Wir haben hier 2 Strings direkt miteinander verglichen. Dies bringt uns eigentlich wenig. Aber wir können auch ein String und eine Variable oder eine Variable mit einer anderen Variable vergleichen.

<?php
    $name
= "Max";
    
$xyz  = ("Max" == $name);
    
var_dump($xyz); // Ausgabe: bool(true)
    
echo "<br />\n";
    
// Ein Zeilenumbruch im Quelltext und in der HTML-Ausgabe
                    
    
$vorname  = "Max";
    
$nachname = "Mustermann";
    
    
$xyz = ($vorname == $nachname);
    
var_dump($xyz);  // Ausgabe: bool(false) , da die Werte nicht gleich sind.
?>

Die Variablen mit den booleschen Werten können wir jetzt mit if() abfragen.

<?php
    $vorname
= "Max";
    
$nachname = "Mustermann";

    
$xyz = ($vorname == $nachname);
    if(
$xyz) {
        echo(
"Der Vorname und der Nachname ist gleich");
    }                                                   
    else {
        echo(
"Der Vorname und der Nachname ist nicht gleich");
    }
?>

Dieser Programmcode gibt folgendes aus.

Der Vorname und der Nachname ist nicht gleich
        

Wir haben hier immer erst das 'Ergebnis' des Vergleichs in eine Variable geschrieben und diese dann mit if verarbeitet. Diesen Zwischenschritt über eine Variable können wir uns auch sparen und den Vergleich direkt in if() verwenden.

<?php
    $zahl1
= 5;
    
$zahl2 = 7;
    
    if(
$zahl1==$zahl2) {
        echo(
"Die Zahlen ".$zahl1." und ".$zahl2." sind gleich");
    }
    else {
        echo(
"Die Zahlen ".$zahl1." und ".$zahl2." sind nicht gleich");
    }
?>

Hier wird der else-Teil ausgeführt da 5 ungleich 7 ist.

Fragen zum aktuellen Thema

  1. Was ist der Unterschied zwischen = und == ?
  2. Was muss man bei einer if-Abfrage beachten
Was ist der Unterschied zwischen = und == ?

Es kann häufig passieren, dass man statt 2 = nur ein = schreibt. Dann hat man unglücklicherweise eine Zuweisung in einer If-Abfrage (ist möglich und manchmal nützlich). Deshalb:

  • = ist der Zuweisungsoperator. Mit ihm weist man dem Ausdruck links einer Variablen rechts zu.

    <?php
        $var
    = "xy";  // Zuweisung
    ?>
  • == ist der Vergleichsoperator. Mit ihm lassen sich 2 Werte miteinander vergleichen. Die Überprüfung liefert true bei Gleichheit und false bei Ungleichheit.

    <?php
        
    if("bla"==$xyz)
            echo(
    "Die Variable hat den Wert bla");
    ?>

Wenn man ein Vergleich mit einem festen Wert vornimmt sollte man den festen Wert links vom Vergleichsoperator und rechts die Variable hinschreiben. Wenn man dann ein = vergiss, meckert dann PHP, dass man einem festen Wert keinen neuen Wert hinzufügen kann.

Was muss man bei einer if-Abfrage beachten

Eine If-Abfrage darf nicht mit einem ; abgeschlossen werden. Sonst erkennt PHP den Code so, dass die If-Abfrage den Befehl ";" steuert. Die nachfolgenden Befehle gehören dann nicht mehr zur If-Abfrage.

Nach oben