Einführung in Die PHP-Programmierung
Einführung in Die PHP-Programmierung
7. August 2006
Inhaltsverzeichnis
1. Session: PHP-Grundlagen 1
1.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Was ist PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Grundlegendes zu dynamischen Webseiten . . . . . . . . . . . . 2
1.4 Einbindung in HTML . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Installation und Konfiguration eines Basissystems zum arbeiten
mit PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.1 Apache und PHP installieren . . . . . . . . . . . . . . . . 4
1.5.2 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.3 PHPEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Grundlegende Strukturen in PHP . . . . . . . . . . . . . . . . . . 6
1.6.1 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6.2 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6.3 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6.4 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . 14
1.6.5 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.6.6 Kontrollfragen . . . . . . . . . . . . . . . . . . . . . . . . 16
1.6.7 Einbinden von weiteren Skript-Dateien . . . . . . . . . . 17
1.7 Kontrollfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
i
INHALTSVERZEICHNIS ii
2.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.1 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
iii
List of Algorithms
iv
1. Session: PHP-Grundlagen
1.1 Einführung
Diese Einführung in PHP soll dazu dienen, die grundlegende Arbeitsweise mit
PHP zu erlernen, mit dem Zweck selbst dynamische Webseiten mit PHP er-
stellen zu können. Das vorliegende Skript deckt sicherlich nicht die gesam-
te Funktionsvielfalt von PHP ab, gibt aber einem Anfänger die Möglichkeit
grundlegende Strukturen wie Variablen, Operatoren oder Kontrollstrukturen
und deren handhabung mit PHP zu erlernen ohne dabei von der Vielfalt von
PHP direkt erschlagen zu werden. Diese Einführung basiert auf den Erfahrun-
gen der Autoren, dem Skript PHP Einführung von Thomas Nunninger (wel-
ches wiederum auf der PHP-Schulung von Ulf Wendel und Peter Hartmann
basiert), der FAQ der Newsgruppen [Link].*1 und der offiziellen Do-
kumentation2 . Dem Leser wird empfohlen nach der Teilnahme am PHP Kurs
im Rahmen des Sommercampus 2006 an der Albert-Ludwigs-Universität Frei-
burg sich mit Hilfe des Online-Handbuchs von PHP weiter mit dem Thema
auseinanderzusetzen. Hier sollte man allerdings auf die englische Version zu-
rückgreifen, da die deutsche Übersetzung des Handbuchs der englischen Ver-
sion deutlich hinterherhinkt. Bei vielen Problemen hilft die oben genannte FAQ
und das Handbuch (insbesondere die User-Comments) weiter, ansonsten kann
man sich nach intensiver Lektüre dieser beiden und der Suche nach einer Pro-
blemlösung mittels Google auch an die Newsgroups [Link].* wen-
den. Die Webseite SelfPHP ist (im Gegenteil zu Selfhtml3 ) allerdings überhaupt
nicht zu empfehlen, da diese hoffnungslos veraltet ist.
1
1. SESSION: PHP-GRUNDLAGEN 2
Webseiten. Die Anweisungen der Sprache sind dabei in den HTML-Code ei-
ner Webseite eingebettet, d. h. jede HTML-Seite ist auch ein gültiges PHP-
Programm. Die Syntax von PHP ist ähnlich wie die von C/C++, Java oder
JavaScript. Die Sprache zeichnet sich vor allen Dingen durch ihre leichte Er-
1 <?php
2 echo ’Hello World!’;
3 ?>
überlassen.
1. SESSION: PHP-GRUNDLAGEN 3
einer Anfrage eines Benutzers, der vom Server die Seite „[Link]“ anfor-
dert. Der Client (also der Web-Browser) schickt eine Anfrage an den Server
auf dem die PHP-Seite gespeichert ist mit einer Anfrage nach [Link].
Am Server wird diese Anfrage von einem speziellen Programm, dem HTTP-
Server (z.B. Apache) erhalten. Wenn nun eine statische HTML-Seite (.html) ge-
wünscht ist, ließt der Server sie direkt aus und schickt sie zurück an den Client.
Ist aber eine PHP-Seite gefragt, leitet er die Anfrage an den PHP-Präprozessor
(dem Programm das sozusagen hinter der Programmiersprache PHP steht)
weiter. Ob es sich bei einer Anfrage um eine statische HTML-Seite oder eine
PHP-Seite handelt, entscheidet der Webserver andhand der Dateinamenerwei-
terung. Standard sind .html für statische Seiten und .php für PHP-Seiten. Diese
Einstellung kann aber auch beliebig verändert werden, so dass z.B. auch PHP-
Code in .html-Dateien geparst wird. Der PHP-Präprozessor liest nun den PHP-
Quelltext der Seite, parst ihn und generiert daraus die HTML-Seite, die an den
HTTP-Server und schlussendlich zum Client weitergeleitet wird. Der Browser
stellt nun das zurückgegebe HTML (hier ist also kein PHP-Code mehr enthal-
ten) dar und führt eventuell enthaltenen JavaScript Code aus.
[Link] Experteninstallation
Für diejenigen, die sich zutrauen PHP und Apache selbst zu installieren und
konfigurieren empfehlen wir sich an folgenden Stichpunkten zu orientieren:
7 [Link]
1. SESSION: PHP-GRUNDLAGEN 5
1.5.2 Eclipse
Wir empfehlen für die Entwicklung Eclipse zu installieren. Eclipse hat einige
nette Features, wie z.B. die Integration mit Subversion oder CVS, automatische
Code-Ergänzung, etc. Eclipse läuft ausserdem auf (fast) allen Plattformen und
ist evtl. einigen Personen von der Entwicklung mit Java her schon bekannt.
Empfehlenswert ist es bei Eclipse gleich die Web Tools Platform9 mitzuinstal-
lieren, hier gibt es das ganze auch als Basispaket gleich inklusive Eclipse, dann
spart man sich ein bisschen Installationsarbeit. Unter Windows würde man
sich also das wtp-all-in-one-sdk-R-1.5.0-200606281455-win32.zip10 Zip-File her-
unterladen und installieren. Un*xer können sich mit Hilfe Ihres Paketmanagers
Eclipse installieren und das Plugin über Eclipses Pluginverwaltung nachinstal-
lieren, oder das .[Link] verwenden.
8 Apache: [Link] PHP5.x zip package von: [Link]
9 [Link]
10 Stand 2006-07-31
1. SESSION: PHP-GRUNDLAGEN 6
1.5.3 PHPEclipse
PHPEclipse ist ein Plugin für Eclipse, das Eclipse um einige nette Features er-
weitert. Dazu gehören unter anderem:
• PHP, HTML, XML, CSS und Smarty Syntax Highlighting
• Code completion
• Web Browser Preview
Um PHPEclipse zu installieren kann man Eclipses Plugin Manager verwenden,
folgende Schritte11 sind dabei notwendig:
• Help . Software Updates . Find and Install
• (x) search for new features to install
• „New Remote Site“ anklicken
• Als Name z.B. PHPEclipse eingeben und als URL: [Link]
[Link]/update/releases
• „Finish“ anklicken
• [x] PHPEclipse anklicken
• Next, next, next usw. bis alles installiert ist ;-).
1 <?php
2 error_reporting(E_ALL);
3 ?>
Damit werden z.B. Fehler wie fehlende Initialisierung von Variablen etc.
angemängelt was durchaus den ein oder anderen Programmierfehler verhin-
dert. Ist eine Anwendung fertig entwickelt und im produktiven Einsatz, sollte
man das Errror-Reporting-Level wieder heruntersetzen (z.B. mit
11 Quelle: [Link]
_Installation_:_Installing_PHPEclipse
1. SESSION: PHP-GRUNDLAGEN 7
1.6.1 Kommentare
In PHP gibt es mehrere Möglichkeiten Kommentare zu verfassen, diese können
ein- oder mehrzeilig sein oder dazu dienen den Code so zu kommentieren,
dass Kommentare später automatisch verarbeitet werden können.
1 <?php
2 echo ’Hallo Welt!’; // Dies ist ein einzeiliger Kommentar
3 echo ’Hallo Welt!’; # Dies ist auch ein einzeiliger
Kommentar
4 ?>
1 <?php
2 /*
3 Dies ist ein
4 mehrzeiliger
5 Kommentar
6 */
7 echo ’Hallo Welt!’;
8 ?>
Algorithm 7 Doc-Kommentare
1 <?php
2 /**
3 * Dieser Kommentar beschreibt die funktionsweise des
nachfolgenden Codes
4 * Es wird Hallo Welt! ausgegeben.
5 */
6 echo ’Hallo Welt!’;
7 ?>
1.6.2 Variablen
Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom
Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Klein-
schreibung unterschieden (case-sensitive: $a ist also eine andere Variable als
$A). Variablen-Namen werden in PHP nach den gleichen Regeln wie ande-
re Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buch-
staben oder einem Unterstrich („_“), gefolgt von einer beliebigen Anzahl von
Buchstaben, Zahlen oder Unterstrichen. Variablen müssen in PHP nicht initia-
lisiert werden, es gehört aber zum guten Stil, das zu tun.
Algorithm 8 Variablenzuweisungen
1 <?php
2 $var = 7;
3 $var = 2.1;
4 $var = ’foo’;
5 ?>
1 <?php
2 $a = $b = $c = 42;
3 ?>
Algorithm 10 Heredoc-Syntax
1 <?php
2 $a = <<<EOS
3 Dies ist ein String
4 mit Zeilenumbruch
5 EOS;
6 ?>
1. SESSION: PHP-GRUNDLAGEN 9
Hierbei ist zu beachten, dass der endende Bezeichner (hier: EOS) alleine auf
einer Zeile stehen muss.
[Link] Datentypen
In PHP gibt es verschiedene Arten von Datentypen, dazu gehören skalare Da-
tentypen, zusammengesetzte Typen und spezielle Datentypen wie Ressourcen.
1 <?php
2 // Deklaration eines Integer-Wertes
3 $myint = 123;
4 // Deklaration eines Strings
5 $mystring = "Hallo Welt!";
6 // Deklaration und Zuweisung einer booleschen Variable
7 $mybool = true;
8 $mybool = false;
9 ?>
Wenn man eine Variable nach Boolean castet, so liefert der Ausdruck bis
auf wenige Ausnahmen immer true:
1. SESSION: PHP-GRUNDLAGEN 10
1 <?php
2 $str = "123";
3 if ($str) {
4 echo ’bool’; // bool wird ausgegeben
5 }
6 $str = ’’;
7 if ($str) {
8 echo ’bool’; // bool wird NICHT! ausgegeben
9 }
10
11 $int = 0;
12 if ($int) {
13 echo ’bool’; // bool wird NICHT! ausgegeben
14 }
15 $float = 0.0
16 if ($float) {
17 echo ’bool’; // bool wird NICHT! ausgegeben
18 }
19 ?>
Algorithm 13 Strings
1 <?php
2 $i=5;
3 $str = ’Das wird nicht ausgewertet: $i’;
4 echo $str; // Das wird nicht ausgewertet: $i
5 $str = "Das wird ausgewertet: $i";
6 echo $str; // Das wird ausgewertet: 5
7 ?>
Algorithm 14 Arrays
1 <?php
2 $arr = array(’123’,’345’);
3 $arr = array(1,2,3,4);
4 $arr = array(
5 1 => ’mystr1’,
6 2 => ’mystr2’,
7 "str" => "iHaveAStringKey"
8 );
9 // Mehrdimensionale Arrays
10 $arr2[1][3] = ’test’;
11 // Automatische Schlüsselerzeugung
12 $arr3 = new array();
13 $arr3[] = 4;
14 $arr3[] = 5;
15 echo $arr3[1];
16 ?>
Objekte sind Instanzen von Klassen, darauf wird im Abschnitt 2.2 genauer
eingegangen.
Ressourcen nur von speziellen Funktionen erstellt werden (z.B. fopen) kann
man auch andere Variablen nicht zu diesem Typ casten.
Algorithm 15 Resourcen
1 <?php
2 $res = mysql_connect("localhost", "username", "pass");
3 // $res ist jetzt eine resource (wenn der connect geklappt
hat)
4 print $result; //Resource ID#1
5 ?>
• $_ENV Umgebungsvariablen
In $_POST landen alle Variablen die dem Script via HTTP Post übergeben wur-
den, in $_GET entsprechend alle GET-Variablen. Ruft man ein Script also z.b.
so auf: [Link]?var=123, so kann man ueber $_GET[’var’] auf die übergebene
Variable var zugreifen. $_GLOBALS enthält globale Variablen, diese sind ue-
berall verfügbar. D.h. man kann innerhalb einer Funktion auf eine Variablen
zugreifen die im globalen Kontext deklariert wurde. Die Funktion phpinfo() lis-
tet all diese Variablen auf und gibt zusätzliche Informationen über die PHP-
Version. Mittels print_r($_POST) kann man den gesamten Inhalt des POST-
Arrays ausgeben. Äquivalent gilt diese natuerlich auch für die anderen vor-
definierten Variablen.
1. SESSION: PHP-GRUNDLAGEN 13
[Link] Konstanten
Konstanten kann man in PHP auch anlegen, diese werden mit skalaren Wer-
ten angelegt und können dann nicht mehr verändert werden. Mit is_defined()
kann man überprüfen ob eine Konstante schon existiert. Es gibt auch bereits
vordefinierte Konstanten wie __file__ und __line__.
Algorithm 16 Konstanten
1 <?php
2 define(’MY_CONST’,123);
3 echo MY_CONST;
4 echo ’Dies wird in Zeile ’,__line__,’ im Script ’,__file__
,’ ausgegeben.’;
5 ?>
[Link] Geltungsbereich
In PHP unterscheided man verschiedene Geltungsbereiche von Variablen:
• globale Gültigkeit: Innerhalb des „globalen Kontextes“ deklarierte Va-
riablen sind überall zugreifbar. Innerhalb von Funktionen können diese
mittels global $var; in den aktuellen Kontext gezogen werden, dann kann
man einfach mittels echo $var; darauf zugreifen. Eine einfachere und (im-
ho) bessere Möglichkeit stellt der Zugriff mittels des superglobalen Ar-
rays $_GLOBALS dar: echo $_GLOBALS[’var’];.
• lokale Gültigkeit: Die innerhalb von Funktionen deklarierten Variablen
verlieren ausserhalb der Funktion Ihre Gültigkeit.
• Die Weitergabe von Variablen an ein anderes Skript ist entweder über
GET oder POST möglich, oder man speichert Variablen in Cookies (das
sollten nur Ids sein) oder als Session-Variablen: _SESSION[’var’] = 124;.
Für die Verwendung von Session-Variablen muss allerdings zuerst eine
session mit session_start() erzeugt werden.
1.6.3 Operatoren
Es gibt drei Arten von Opratoren. Als erstes gibt es den unären Operator, der
nur mit einem Wert umgehen kann, zum Beispiel ! (der Verneinungsoperator)
oder ++ (der Inkrementoperator). Die zweite Gruppe sind die sogenannten bi-
nären Operatoren; diese Gruppe enthält die meisten Operatoren, die PHP un-
terstützt. Die dritte Gruppe bildet der ternäre Operator ?:. Dieser sollte eher
benutzt werden um abhängig von einem dritten Ausdruck eine Auswahl zwi-
schen zwei Ausdrücken zu treffen, als zwischen zwei Sätzen oder Pfaden der
Programmausführung zu wählen. Den ternären Operator kann man allerdings
1. SESSION: PHP-GRUNDLAGEN 14
auch als verkürzte Schreibweise der If-Bedingung verwenden. Tabelle 1.1 gibt
eine Übersicht über verschiedene Operatoren in PHP.
Arithmetisch +, -, *, /, % (modu-
lo)
Zuweisung =
Kombinierte Zuweisung +=, -=, *=, /= $a+=5; . . . analog zu
$a=$a+5;
Bitoperatoren &, |, ,̃ ,̂ », «
Vergleichsoperatoren <, <=, >, >=, ==,
!=, <>, (Wertver-
gleiche) ===, !==
(Identitätsverglei-
che)
Fehlerkontrolle @ unterdrückt Fehlermel-
dungen
Programmausführung “ (Backticks)
Inkrement bzw. Dekre- ++$v, –$v, $v–,
ment $v++
Logische Operatoren and, or, xor, !, &&,
||
Stringverknüpfungen . Konkatenation von zwei
Strings: $str = $s1 . $s2;
Typen instanceof Instanz einer Klasse
1.6.4 Kontrollstrukturen
In PHP gibt es verschiedene Kontrollstrukturen die dazu dienen verschiedene
Befehle mehrfach hintereinander auszuführen, im Code zu verzweigen oder
bestimmte Datenstrukturen wie z.B. Arrays zu durchlaufen. If, Elseif und Else
dienen dazu Code nur unter bestimmten Bedingungen auszuführen.
1. SESSION: PHP-GRUNDLAGEN 15
Algorithm 17 If-Bedingungen
1 <?php
2 $var=1;
3 if (1== $var) {
4 echo 1;
5 } elseif (2 == $var) {
6 echo 2;
7 } else {
8 echo ’Was anderes’;
9 }
10 ?>
Algorithm 18 Switch-Statement
1 <?php
2 switch ($var) {
3 case 1: {
4 echo 1;
5 break;
6 }
7 case 2: {
8 echo 2;
9 break;
10 }
11 default: {
12 echo ’Was anderes’;
13 break;
14 }
15 }
16 ?>
Hierbei ist zu beachten, dass man jeden Ausdruck innerhalb des switch--
case-Statements verwenden kann, nicht nur Integer-Werte. Das break-Statement
ist wichtig, damit die folgenden Blöcke nicht mehr ausgeführt werden. In Schlei-
fen kann auch der Befehl continue verwendet werden, dieser überspringt dann
die weiteren Befehle im Schleifenrumpf und geht zur nächsten Iteration über.
Des Weiteren gibt es noch verschiedene Schleifen in PHP, die while Schleife,
die do-while-Schleife, eine for-Schleife sowie das foreach Konstrukt.
1. SESSION: PHP-GRUNDLAGEN 16
Algorithm 19 Schleifen
1 <?php
2 // while-schleife
3 while (<expr>) {
4 // Befehle
5 }
6
7 // do-while-schleife
8 do {
9 // Befehle
10 } while (<expr>)
11
12 // for-schleife
13 for ($i=0; $i<10; $i++) {
14 //Befehle
15 }
16
17 // foreach
18 foreach ($array as $key => $value) {
19 echo ’$array[’,$key,’] contains ’,$value;
20 }
21 ?>
1.6.5 Funktionen
1.6.6 Kontrollfragen
Funktionen können in PHP an jeder Stelle im Code definiert werden. Der Rück-
gabewert muss nicht typisiert werden und es können beliebig viele Variablen
übergeben werden. Algorithmus 20 zeigt eine Funktionsdefinition.
Algorithm 20 Funktionen
1 <?php
2 function outputSomething($str = ’defaultValue’) {
3 echo ’The String is: ’,$str;
4 }
5
10 echo addSomething(4); // 9
11 echo addSomething(1,4); // 5
12 ?>
1. SESSION: PHP-GRUNDLAGEN 17
1.7 Kontrollfragen
• Was sind skalare Datentypen? Was für skalare Datentypen gibt es in PHP?
• Was ist der Unterschied zwischen server- und clientseitigem Scripting?
• Wie kann man Kommentare in PHP verfassen?
• Welche Funktionen kann der +-Operator haben? Auf welche Datentypen
kann man Ihn anwenden?
• Wozu ist das foreach-Konstrukt?
• Wo liegt in Algorithmus 21 der Fehler? Gibt es mehr als einen Fehler?
1 [Link]:
2 --------------
3 <?php
4 $user = ’John Doe’;
5 include(’[Link]’);
6 ?>
7 [Link]:
8 --------------
9 echo ’Hallo $user’;
1.8 Übungsaufgaben
1. Lass Dir mit phpinfo() Informationen über Deine PHP-Installation anzei-
gen. Welche Informationen darin wären für eventuelle Angreifer / Ha-
cker interessant?
1. SESSION: PHP-GRUNDLAGEN 18
2. Generiere eine Webseite, bei der der Benutzer durch Klicken auf Links
("blau, grün, rot") die Hintergrundfarbe der Seite wechseln kann.
3. Schreibe ein Önline-Notizbuch"([Link]) für mehrere User:
• der Username soll per URL übergeben werden: [Link]?user=
Hans
• Wird kein Username übergeben, soll das Skript mit einer Fehlermel-
dung abbrechen (Tip: Funktion die());
• Für jeden User wird ein Textfile <username>.txt angelegt (siehe da-
zu die Filesystem-Funktionen, [Link]
[Link]), das für den jeweiligen User eingebunden
wird
• neue Notizen sollen über ein HTML-Formular eingegeben werden
<textarea>...
• Zusatz: für jeden User soll das Datum der letzten Änderung seiner
Notiz angezeigt werden (Tip: filemtime(), date())
4. Welchen Datentyp haben die Variablen, die per URL weitergegeben wer-
den?
2. Session: PHP-Grundlagen /
Objektorientierung
2.1.2 Dateisystem
Die Funktion resource fopen ( string filename, string mode [, bool use_include_path
[, resource zcontext]] ) wird verwendet um in PHP Dateien zu öffnen zur wei-
teren Verarbeitung. Der erste Parameter gibt die zu benutzende Datei an und
der Parameter mode gibt an wie diese Datei geöffnet werden soll. Ist mode „r“,
so wird die Datei im nur-lesen-modus geöffnet. Ist mode „r+“, so kann gele-
sen und geschrieben werden, der Dateizeiger zeigt dabei an den Anfang der
19
2. SESSION: PHP-GRUNDLAGEN / OBJEKTORIENTIERUNG 20
Datei. Wird „w“ als mode verwendet, so wird die Datei zum Schreiben geöff-
net, der Dateizeiger zeigt auf den Anfang der Datei und sämtlicher Dateiinhalt
wird vor dem Schreiben gelöscht. „a“ öffnet die Datei zum Schreiben, der Da-
teizeiger ist dabei ans Ende der Datei gesetzt (append). Weitere modes sind
„a+“, „x“ und „x+“, siehe [Link]
[Link].
Mit den Funktionen is_dir, is_file und is_link kann der Typ einer datei über-
prüft werden. is_executable überprüft ob eine Datei ausführbar ist. Genauso gibt
es is_readable und is_writable.
• chdir – In ein bestimmtes Verzeichnis wechseln
• dir – Ein pseudo-objektorientierter Mechanismus zum Lesen von Ver-
zeichnissen.
• opendir – Öffnet ein Verzeichnishandle.
• closedir – Schliesst ein Handle, das von opendir geöffnet wurde.
• getcwd – Gibt das aktuelle Arbeitsverzeichnis zurück
• readdir – Liest einen Eintrag von einem Verzeichnis-Handle
• rewinddir – Setzt ein Verzeichnis-Handle zurück.
• scandir – Liest ein Verzeichnis aus
• glob – Findet Pfadnamen die dem angegebenen Ausdruck entsprechen
2.1.3 Arrays
Für die Verwendung von Arrays gibt es in PHP einige nützliche Funktionen,
dazu gehören unter anderem folgende:
• array_keys – Liefert alle Schlüssel eines Arrays
• array_values – Liefert alle Werte eines Arrays
• array_flip – Vertauscht Werte und Schlüssel in einem Array
• array_reverse – Liefert ein Array mit umgekehrter Reihenfolge der Ele-
mente
• array_pop – Liefert das letzte Element eines Arrays
• array_shift – Liefert ein Element vom Beginn eines Arrays
• array_map – Wendet eine Callback-Funktion auf die Elemente von Ar-
rays an
• array_walk – Wendet eine Benutzerfunktion an jedem Element eines Ar-
rays an
2. SESSION: PHP-GRUNDLAGEN / OBJEKTORIENTIERUNG 21
• array_search – Durchsucht ein Array nach einem Wert liefert bei Erfolg
den Schlüssel
• array_merge – Führt ein oder mehrere Arrays zusammen
• asort – Sortiert ein Array und behält die Indexverbindungen
• ksort – Sortiert ein Array nach Schlüsseln
• natsort – Sortiert ein Array in "natürlicher Reihenfolge"
• rsort – Sortiert ein Array in umgekehrter Reihenfolge
• array_multisort – Sortiert mehrere oder multidimensionale Arrays
• . . . siehe [Link]
Vor allem array_map und array_walk können bei der Verarbeitung eines Ar-
rays nützliche Dienste erweisen, so muss man sich nicht selbst Fuktionen schrei-
ben die ein Array durchlaufen, sondern lediglich eine Funktion die ein Element
eines Arrays verarbeitet.
2.1.4 Mail
Mit PHP ist es auch möglich Mails zu versenden, insofern der Server auf dem
PHP ausgeführt wird entsprechend konfiguriert ist. Sollte das nicht der Fall
sein, gibt es PHP-Klassen die Mail-Funktionen bereitstellen um einen exter-
nen Mailserver zu verwenden. Selbstverständlich kann man diese auch selbst
schreiben ;-). Die Funktion mail bool mail ( string to, string subject, string message
[, string additional_headers [, string additional_parameters]] ) dient dazu Mails zu
versenden. Hierbei ist darauf zu achten, dass falls zusätzliche Header angege-
ben werden diese Zeilen mittels „\r\n“ zu trennen sind. Der Rückgabewert
„true“ gibt lediglich an, dass eine Mail an den MTA zum versenden übergeben
wurde. Es bedeutet nicht, dass die Mail auch den Empfänger erreicht hat.
2. SESSION: PHP-GRUNDLAGEN / OBJEKTORIENTIERUNG 22
1 <?php
2 $empfaenger = ’empfaenger@[Link]’;
3 $betreff = ’Betreffzeile’;
4 $nachricht = ’Hallo Text foo bar’;
5 $header = ’From: absender@[Link]’ . "\r\n" .
6 ’Reply-To: replyto@[Link]’ . "\r\n" .
7 ’X-Mailer: PHP/’ . phpversion();
8
2.1.5 Sessions
Sessiondaten sind Daten, die z.B. von einem PHP-Script auf dem Server gespei-
chert werden, und die meistens für die Dauer des Besuchs (Session/Sitzung)
auf mehreren Pages einer Website ihre Gültigkeit behalten. Sessiondaten kön-
nen z.B. dazu benutzt werden, um dem Besucher restriktiven Zugriff (z.B. nach
einem Login) auf Teile einer Website zu erlauben - üblicherweise zu einem Ad-
ministrationsbereich. Bei Verwendung dieser Funktionen ist zu beachten, dass
eine neue Session nur dann angelegt werden kann, wenn noch keine Ausga-
be stattgefunden hat. Sessions werden mit dem Befehl session_start() gestartet.
Der Zugriff auf Sessionvariablen erfolgt über das assoziative Array $_SESSI-
ON. Durch das erste Ansprechen eines Arrayelements wird die Sessionvaria-
ble angelegt, durch ein unset() kann eine Variable gelöscht werden.
Algorithm 23 Sessions
1 <?php
2 session_start();
3 $_SESSION[’loggedin’] = true;
4 ?>
2. SESSION: PHP-GRUNDLAGEN / OBJEKTORIENTIERUNG 23
2.2 Objektorientierung
2.2.1 Grundlegendes
Für die Objektorientierte Programmierung bietet PHP5 ein klassenbasiertes
Objektmodell an, das stark an das von C# oder Java angelehnt ist. Ein objekt-
orientiertes PHP-Programm besteht aus einer Menge von PHP-Klassen. Zual-
lererst stellt sich aber die Frage warum man in PHP objektorientiert program-
mieren sollte. Dazu schauen wir uns folgendes Beispiel in Algorithmus 24 an.
1 <?php
2 function handle_error() {
3 // Fehler verarbeiten
4 }
5
6 $connection = mysql_connect($host,$user,$pass);
7
20 mysql_free_result($result);
21 ?>
Selbst wenn man diesen Code in eine Include-Datei auslagert, stellt sich
das Problem der wiederverwendbarkeit. Es müssen globale Variablen verwen-
det werden und diese werden überschrieben, wenn man eine zweite Daten-
bankverbindung aufbauen will. Besser ist hier also die Verwendung von Ob-
jektorientierung zur Kapselung der Variablen und Funktionen. Algorithmus 25
veranschaulicht dies.
2. SESSION: PHP-GRUNDLAGEN / OBJEKTORIENTIERUNG 24
1 <?php
2
3 class DB {
4 var $connection = null;
5 var $result = null;
6
Wie man sieht ist das Handling der SQL-Verbindung erheblich vereinfacht
und der Code ist viel besser wartbar geworden.
Algorithm 26 Vererbung
1 <?php
2 class Class2 extends Class1 {
3 // Class2 erbt die Methoden und Variablen von Class1
4 }
5 ?>
PHP4 PHP5
Klassendefinition class <name> ([abstract] | [final
{...} ]) class <name>
{...} [implements <
interface>]
Methoden function(){...} ([abstract] | [final]
[static]) [public |
private | protected]
function(){...}
Konstruktoren Name der Klasse __construct
Destruktoren n/a __destruct
Besondere Methoden __sleep, __call, __get, __set
__wakeup , __isset, __unset ,
__sleep, __wakeup,
__toString, __clone,
__autoload
Variablen var <name> [= (public | private |
expr;] protected) [static]
<name> [=expr;]
Konstanten n/a const <name_ohne_$>
[=expr;]
Mehrfachvererbung n/a n/a
Interfaces n/a interface <name>
{...}
Überladung n/a Methoden,Variablen
(__call ..)
Objektiteration wie Hash (foreach wie Hash (foreach)
) oder Implementie-
rung der internen
Interfaces Iterator,
IteratorAggregate
Patterns n/a Factory, Singleton
Klonen $obj1 = $obj2 (!) $obj1 = clone $obj2
Gleichheit von Objekten $obj1 === $obj2: $obj1 == $obj2:
Attribu- Attribute,Werte,Klasse;
te,Werte,Klasse $obj1 === $obj2:
gleich gleiche Instanz der
gleichen Klasse
Reflection n/a API für reverse enginee-
ring
Type hinting n/a möglich
Autoloading n/a mittels __autoload
2.3 Kontrollfragen
• Wie kann ich das aktuelle Datum in der Form [Link] ausgeben?
• Wie kann ich einen String an eine Datei anhängen? (z.B. bei Log-Files)
• Kann ich Objekte als Keys für Arrays verwenden? Kann ich Objekte in
Arrays ablegen?
• Wozu braucht man Sessions?
• Wie rufe den Konstruktor der Vaterklasse auf?
• Wie erzeuge ich eine identische Kopie eines Objekts?
• Kennst Du ein Beispiel eines objektorientierten Codes, der unter PHP5,
aber nicht unter PHP4 funktioniert?
2.4 Übungen
• Schreibe eine Klasse StopWatch um die Ausführungszeit eines PHP-Skripts
zu messen.
• Erweitere die Klasse um eine Funktion pause() um Teile des Skripts von
der Zeitmessung auszunehmen.
• Entwirf eine Klasse DateTool um den Zugriff auf häufig verwendete Da-
tumsfunktionen zu kapseln. Benutze die Klasse statisch.
• Entwirf die Klassen Person, Student und Mitarbeiter mit einer Metho-
de toHTML(). Student und Mitarbeiter sollen dabei von Person abgeleitet
sein und zusätzlich zum Vor- und Nachnamen der Person die Matrikel-
nummer bzw. den Chef des entsprechenden Angestellten ausgeben (in-
klusive aller seiner Details).
3. Session: Datenbankanbindung /
PEAR
30
3. SESSION: DATENBANKANBINDUNG / PEAR 31
3.3 PEAR
PEAR bedeutet PHP Extension and Application Repository und ist eine Samm-
lung von PHP Klassen die die Arbeit mit PHP erheblich vereinfachen.
3.3.1 Überblick
Es gibt viele verschiedene Klassen in Pear unter anderem zu den Themen Da-
tebankzugriff (Pear::DB), Formularen (PEAR::HTML_Quickform), Authentifi-
zierung (PEAR::Auth) oder automatisierte Tests (PHPUnit). Auf ein paar Pear-
Klassen wollen wir nun im Detail eingehen.
3.3.2 Datenbankabstraktion: DB
Für den Zugriff auf relationale Datenbanken bietet es sich an einen Daten-
bankabstraktionslayer zu verwenden um die Möglichkeit zu haben zu einem
späteren Zeitpunkt auf einfache Art und Weise das Datenbankmanagement-
system zu wechseln. Pear bietet hierzu verschiedene Klassen an, dazu gehö-
ren Pear::DB und Pear::MDB(2). Da Pear::MDB2 Pear::DB nahezu abgelöst hat,
empfiehlt es sich Pear::MDB2 einzusetzen.
3. SESSION: DATENBANKANBINDUNG / PEAR 32
Algorithm 27 Pear::MDB
1 <?php
2 require_once ’[Link]’;
3 $dsn = ’pgsql://user:pass@hostname/mydb’;
4 $options = array(
5 ’debug’ => 2,
6 ’result_buffering’ => false,
7 );
8
16 $mdb2->disconnect();
17 ?>
1 // Select ausführen
2 $res =& $mdb2->query(’SELECT * FROM table1’);
3
Wie man sieht ähnelt das Prinzip von MDB dem der in Algorithmus 25
gezeigten Vorgehensweise.
1 <?php
2 define(’DEFAULT_LANG’,’en’);
3 $GLOBALS[’i18ntexts’] = array(
4 ’de’ => array(
5 ’HELLO_WORLD’ => ’Hallo Welt’,
6 ’BYE_WORLD’ => ’Tschüss Welt’
7 ),
8 ’en’ => array(
9 ’HELLO_WORLD’ => ’Hello World’,
10 ’BYE_WORLD’ => ’Bye World’
11 )
12 );
13
14 function getI18NStr($key=’’,$lang=DEFAULT_LANG) {
15 if (isset($GLOBALS[$lang][$key])) return $GLOBALS[$lang][
$key];
16 else return @$GLOBALS[DEFAULT_LANG][$key];
17 }
18
Algorithm 30 Pear::Auth
1 <?php
2 require_once "[Link]";
3
13 // Authentifizierungsdetails festlegen
14 $dsn = "mysql://user:password@localhost/database";
15 $auth = new Auth("DB", $dsn, "loginFunction");
16
17 $auth->start();
18 if ($auth->checkAuth()) {
19 // An dieser Stelle ist der Benutzer authentifiziert
20 echo ’Willkommen ’,$auth->getUsername();
21 }
22 ?>
3.4 Kontrollfragen
• Was heisst SQL?
• Wie heisst das SQL-Sprachkonstrukt um Daten aus einer relationalen Da-
tenbank abzufragen?
• Welche Datenbanken unterstützt PHP?
• Welche Möglichkeiten gibt es die eigenen PHP-Skripte unabhängig von
einer bestimmten Datenbank zu machen?
• Was heisst I18N? Was heisst L10N?
• Welche Funktionen bietet Pear? Kann man das essen?
3. SESSION: DATENBANKANBINDUNG / PEAR 35
3.5 Übungen
• Benutze die Klasse Pear::Auth mit Datenbankauthentifizierung um eine
passwortgeschützte Seite zu realisieren.