Start > Informatik > PHP - Kurs > Modular- isieren

Modular- isieren


Sinn und Zweck

Mit Hilfe von PHP kann man die Daten, die aus einem HTML-Formular kommen auswerten. Bisher haben wir jedoch nur einfache Ergebnisse zurückgeliefert und der PHP-Code war in ein recht einfaches HTML-Dokument eingebettet.
In der Realität besteht eine Website allerdings aus sehr vielen Teilen und sieht wesentlich komplexer aus. Dabei besteht eine Website häufig aus immer demselben Grundaufbau und nur die Inhalte ändern sich.
Ein ständiger Wechsel zwischen PHP und HTML macht allerdings den Code sehr unübersichtlich und schwer wartbar. Daher ist es der Ansatz in diesem Kapitel zu erklären, wie man ein PHP Programm sinnvoll strukturiert.

Beispiel

Bei vielen Websites muss der Benutzer erst persönliche Daten eingeben. Anschließend werden die eingegebenen Daten an den Benutzer weitergegeben. Das Auswertungsprogramm sollte dann den Benutzer auch nach falschen Eingaben (siehe Validierung)  darauf hinweisen, was er falsch gemacht hat. Dazu wird in der Regel genau diesselbe Seite nochmal angezeigt, nur dass zusätzlich die fehlerhaften Felder farblich hervorgehoben sind.

Darstellung des Beispiels in UML

Im UML Activity-Diagramm sieht der Ablauf dann so aus:


Man erkennt das abhängig von der Validierung jeweils unterschiedliche HTML-Seiten an den Client ausgeliefert werden.
Die beiden HTML-Seiten unterscheiden sich aber nur im <body> Tag, der <head> -Teil dürfte bei beiden Seiten exakt gleich sein.
Damit lässt sich eine HTML-Seite in mindestens die folgenden Teile aufteilen:


Aus genau diesem Grund baut man eine HTML - Seite aus einzelnen Funktionen zusammen.

Zum Beispiel kann man vier Funktionen entwerfen:
  • fnHTML_Header
  • fnHTML_Footer
  • fnHTML_Body_Result
  • fnHTML_Body_Error
Warum vier?
Ganz einfach, wir brauchen ja eine unterschiedliche Verarbeitung, je nachdem ob der Benutzer eine korrekte Eingabe gemacht hat oder nicht.
Diese Verarbeitung ist aber für Header und Footer uninteressant, da sich diese beiden Elemente ja nicht ändern.

Was gehört in fnHTML_Header?

In den Header gehören alle Ausgaben, die den HTML-Teil bis </head> betreffen.
Beispiel:

    function fnHTML_Header(){
       print "<html>";
       print "<head>";
       print "<title> This is a test page </title>";
       print "</head>";
       print "<body>";   // <-- der Beginn des Body-Tags kann ruhig hier
                                          //         stehen, da er zu jeder HTML-Datei gehört
    }


Was gehört in fnHTML_Footer?

In den Footer gehören eigentlich nur die schließenden Tags des body's und von html. Allerdings hat man manchmal Seiten, die unten noch ein Werbebanner tragen, oder Impressum immer am Ende anzeigen. Solche Angaben gehören ebenfalls in den Footer.
einfachster Aufbau könnte sein:

    function fnHTML_Footer(){
       print "</body>";      //<-- schliessen des in Header geöffneten Tags
       print "</html>";
    }

Sinnvoller Aufbau eines PHP-Programm

In den bisherigen Sprachen (C, C++ und VB) gab es bei Programmen immer eine Funktion, die als erstes ausgeführt wurde. Zum Beispiel main().
In PHP wird der Code von oben nach unten abgearbeitet. Da es erlaubt ist Funktionen zu verwenden, bevor sie deklariert sind, könnte man theoretisch Funktionsdeklarationen und Aufrufe bunt mischen.
Damit man aber Ordnung hält und auch einen sinnvollen Aufbau hat, ist folgender Seitenaufbau hilfreich:

<?php
    //Zuerst kommt das "Haupt-Programm"
    //Dieses Beispiel liefert einfach nur eine modularisierte Website aus.

    fnHTML_Header();
    fnHTML_Body();
    fnHTML_Footer();

    // ---------------- Hier folgen jetzt alle Funktionsdeklarationen
    //                            es gibt in diesem Absatz KEINE allein stehenden
    //                           Funktionsaufrufe, höchstens innerhalb einer Funktion

    function fnHTML_Header(){ ... }

    function fnHTML_Footer(){ ... }

    function fnHTML_Body(){ ... }

?>

Erklärung:
Mit dieser Code-Struktur kann man nun sinnvoll arbeiten. Das Hauptprogramm steht sozusagen immer am Anfang und die Funktionsdeklarationen stehen am Ende.
WICHTIG: Es dürfen im unteren Teil wirklich nur Funktionen stehen und keine Aufrufe "zwischen" den einzelnen Deklarationen. Sonst kommt man schnell durcheinander.

Beispiel-Aufbau mit Validierung von User-Daten


<?php
    //Zuerst kommt das "Haupt-Programm"

    if (fnValidate() == true){      // entscheiden, ob Benutzerdaten korrekt
        fnHTML_Body_Result();  // dann verarbeiten und Ergebnis ausgeben
    } else {
        fnHTML_Body_Error();   // falsche Eingabe => Fehlermeldung
    }

    // ---------------- Hier folgen jetzt alle Funktionsdeklarationen
    //                            es gibt in diesem Absatz KEINE allein stehenden
    //                           Funktionsaufrufe, höchstens innerhalb einer Funktion

    function fnValidate(){ ... }

    function fnHTML_Header(){ ... }

    function fnHTML_Footer(){ ... }

    function fnHTML_Body_Result(){
        fnHTML_Header();
       // Hier muss die Verarbeitung der Eingabedaten rein und die
       // entsprechende Ausgabe.
        fnHTML_Footer();
    }

    function fnHTML_Body_Error(){
        fnHTML_Header();
       // Jetzt muss eine Ausgabe erzeugt werden, die dem Benutzer
       // mitteilt, was er falsch eingegeben hat.
        fnHTML_Footer();
    }
?>


Infoblätter und Arbeitsblätter

Modularisierung der Ausgabe
Info: fehlt noch.
Ticker
Last update:
October 08. 2018 08:46:35