Stand: 14.05.2019
Lernziele
- Webseite mit Hilfe eines Servers (z.B. XAMPP) und PHP serverseitig programmieren
- Grundlegende Konzepte von PHP (Variablen, Arrays, If, Schleifen, Funktionen) anwenden können
- In PHP Dateien beschreiben und lesen
Links zu PHP:
- PHP-einfach.de (deutsch, gute Erklärungen, gut zum Nachschlagen)
- w3schools.com (englisch, gut zum Nachschlagen)
- PHP-Handbuch (deutsch, offizielle Referenz, eher sperrig aber vollständig)
11.1 Einführung
Bisher haben wir uns ausschließlich mit dem Client beschäftigt. Konkret ist das der Browser eines Benutzers, der eine Webseite aufruft (per Anfrage an einen Server). Der Browser stellt die Webseite dar, indem er HTML/CSS in Grafik umsetzt und gegebenenfalls auch JavaScript-Code ausführt. Dieser ganze Bereich wird auch Frontend-Programmierung genannt, denn hier wird der Code erst auf der Seite des Clients - also im Frontend - ausgeführt.
Der Client bekommt die Webseite von einem Server, der bislang nichts weiter tut als HTML/CSS/JavaScript-Dateien an den Client zu schicken. Der Server kann aber auch Code ausführen, wenn er eine Anfrage bekommt, und dann erst die Webseite zusammenbauen, oft mit Hilfe von Informationen aus einer Datenbank. Diesen Bereich nennt man Server-Programmierung (oder serverseitige Programmierung oder Backend-Programmierung). Das Programm, das auf dem Server läuft, nennt man auch manchmal das Backend. Wichtig ist, dass der Client den Code nie zu Gesicht bekommt, was aus Sicherheitsgründen ein wichtiger Aspekt ist. Eine verbreitete Programmiersprache zur Backend-Programmierung ist PHP:
Webapplikation
In der Kombination aus dynamischen Frontend und zentralem Backend lassen sich mächtige Applikationen, so genannte Webapplikationen herstellen, von Chat-Systemen über gemeinsame Dokumentbearbeitung und Online-Shop bis hin zum sozialen Netzwerk. Ein weiteres Beispiel ist ein Blog. Dort werden bei jedem Aufruf auf dem Server die 5 aktuellsten Beiträge aus der Datenbank ausgelesen und zu einer HTML/CSS-Seite zusammengebaut. Im Frontend sorgt JavaScript-Code für Animationen innerhalb der Benutzerschnittstelle.
PHP
Welche Programmiersprache läuft auf dem Server? Eine der ersten Sprachen ist PHP (rekursives Akronym "PHP is a Hypertext Preprocessor"). Heutzutage verwendet man auch Python, Java, Ruby und andere. Immer populärer wird auch JavaScript als serverseitige Sprache, weil Webentwickler dann nur eine Sprache für Frontend und Backend lernen müssen.
Obwohl PHP eine - für Internetverhältnisse - sehr alte Sprache ist (veröffentlicht 1995), ist sind immer noch die am weitesten verbreitete serverseitige Programmiersprache im Web.
PHP-Systeme
Die hohe Verbreitung von PHP trotz der vielen Alternativen liegt sicher daran, das einige der am meisten genutzen Content-Management-Systemen in PHP geschrieben sind, u. a. auch Wordpress, Typo3 und Joomla.
Weitere Beispiele für PHP-Systeme sind
- Blog- und Webseitentools: Wordpress, Joomla, Drupal, Typo3 ...
- Wikis: MediaWiki (Wikipedia), PhpWiki ...
- Forensysteme: phpBB, fluxBB, myBB ...
11.2 Technische Einrichtung
11.2.1 Server-Software
Zunächst müssen Sie dafür sorgen, dass Ihr Computer muss zum Server wird. Ein Server ist ein Programm, dass die Netzwerkverbindung überwacht und Requests (von außen, aber auch vom eigenen Rechner) empfängt und gegebenenfalls beantwortet. Nebenbei bemerkt: der Begriff "Server" wird auch für die Hardware oder für das Gesamtsystem aus Hardware und Software verwendet, wenn man z. B. sagt "das Dokument liegt auf dem Server von Google".
Bleiben wir bei der Serversoftware. Eine bekannte Serversoftware ist der Apache HTTP Server, da es sich um freie Software handelt. Zwei ähnlich verbreitete, kommerzielle Server sind Microsoft IIS (Microsoft Internet Information Services) und der Google Web Server.
Damit Sie die in diesem Kapitel beschriebenen Techniken testen können, müssen Sie also einen eigenen Server auf Ihren Laptop installieren. Beim Testen schickt dann Ihr Frontend (der Browser) Nachrichten an die von Ihnen installierte und gestartete Server-Software. Ihr Laptop ist also gleichzeitig Client und Server.
11.2.2 XAMPP
Für unsere Zwecke suchen wir eine Serversoftware und später auch noch eine Datenbank-Software. Glücklicherweise gibt es ein Gesamtpaket namens XAMPP, das genau das liefert. Es enthält u. a. die folgenden Komponenten:
- Apache Webserver
- PHP
- MariaDB (eine SQL-Datenbank)
Entwickeln und Testen
XAMPP wurde als System zum Entwickeln und Testen von Websystemen entwickelt. Es geht nicht darum, dass Sie Ihren Laptop als Server für irgendwelche weltweit verfügbaren Dienste anbieten. Das würde schnell Ihren Rechner überlasten oder Hackerangriffe anziehen. Stattdessen nutzen Sie die Software, um eine Interaktion mit einem "echten" Server zu testen. Sie sollten tatsächlich XAMPP nicht als "echten Server" (also für Dienste für Dritte) verwenden, sondern nur zum Entwickeln und Testen.
Deployment
Nach Abschluss Ihrer Entwicklungsarbeit - wenn alles funktioniert -, laden Sie Ihr Programm auf einen externen Server hoch, z. B. auf den Server Ihrer Hochschule oder den Server eines Providers, bei dem Sie Ihre Domain gemietet haben. Das nennt man auch Deployment Dort bekommen Sie meist auch eine SQL-Datenbank, die Sie dann anstelle der XAMPP-Datenbank verwenden. XAMPP ist dann im laufenden System gar nicht mehr vorhanden.
Aber jetzt nochmal zurück zu Ihrer lokalen Testumgebung.
Server starten
Nachdem Sie XAMPP für Ihr Betriebssystem installiert haben, starten Sie XAMPP. Sie sehen eine kleine Kontrolloberfläche. Auf einem Mac sieht das so aus:
Unter Windows sieht es eher so aus (starten Sie xampp-control.exe):
Auf dem Mac wechseln Sie auf den Reiter "Manage Servers":
Sie sehen unterschiedliche Dienste, die einzeln gestartet werden können. Es kann dann jeweils einen Moment dauern, bis ein Dienst auf grün geschaltet wird. Wir benötigen zunächst "Apache Web Server" (das ist die Server-Software), später auch "MySQL Database" (das ist die Datenbank). Starten Sie ruhig beides und warten Sie, bis die Dienste auf grün schalten.
Die Oberfläche lassen Sie einfach laufen.
Im Browser
Jetzt können Sie in einem Browser (z. B. Firefox) über die URL "http://localhost" auf Ihren eigenen Apache-Server zugreifen, den Sie über XAMPP gestartet haben.
Eigene Dateien
Finden Sie das Verzeichnis /htdocs
auf Ihrer Festplatte. Auf einem Mac finden Sie es unter Programme > XAMPP. Unter Windows installieren Sie XAMPP z. B. direkt unter C:
. Dann finden Sie innerhalb von C:\XAMPP
auch htdocs
.
Dieses Verzeichnis ist über das Internet zugänglich. Da Sie auf demselben Rechner sind wie Ihr Server, geben Sie als URL "localhost" an. Wenn Sie eine Testdatei "test.html" im Verzeichnis /htdocs anlegen, können Sie im Browser mit http://localhost/test.html die Datei aufrufen und betrachten.
Sie könnten sich fragen: Ich kann doch auch sonst eine HTML-Datei in meinen Browser ziehen und betrachten - was ist der Unterschied? Der Unterschied ist, dass jetzt Ihre Datei über eine HTTP-Anfrage (also "übers Internet") angefordert wird (ein sog. Request) und dann der Server auf diese Anfrage antwortet (sog. Response), indem er die Datei - ebenfalls über HTTP - zurückschickt.
Interessant wird es, wenn vor dem Zuschicken der HTML-Datei (Response) diese Datei noch angepasst wird, indem PHP-Code ausgeführt und z. B. Datenbank- oder Datei-Inhalte abgerufen und eingebaut werden.
11.3 Erste Schritte
Erstellen Sie jetzt eine Datei mit der Endung .php
z. B. test.php
und stellen Sie sie ins /htdocs
Verzeichnis.
11.3.1 Syntax
Da PHP-Code fast immer zusammen mit HTML-Code auftritt, werden PHP-Codeteile gekennzeichnet.
In Ihre Testdatei schreiben Sie:
<?php
echo 'hello world';
?>
Die erste und letzte Zeile bilden den Rahmen, um anzuzeigen, dass hier PHP steht. Die mittlere Zeile enthält dann einen PHP-Befehl, nämlich echo
- das ist wie "print" in Java einfach eine Ausgabe. Allerdings sind hier keine Klammern notwendig. Die Anführungszeichen können einfach oder doppelt sein und am Ende schließen wir den Befehl mit einem Semikolon ab.
Das hier geht also auch:
<?php
echo "hello world";
?>
Wir werden später noch sehen, was für Unterschiede es zwischen einfachen und doppelten Anführungszeichen gibt.
Genau bedeutet es, dass echo
etwas "ausgibt"? Sie können sich das so vorstellen, dass PHP über die Datei test.php
drübergeht und den kompletten mit <?php ... ?>
eingeklammerten Teil durch das ersetzt, was der echo-Befehl eben sagt (es können auch mehrere echo-Befehle sein). Deswegen auch PHP als "Hypertext Preprocessor": Eine Datei wird zunächst durch PHP "vorverarbeitet", bevor sie z. B. übers Internet an einen Client (etwa Ihr Laptop) geschickt wird.
Wenn Sie in Ihrem Browser also die URL localhost/test.php
eingeben, sollten Sie das sehen:
Wie zu Beginn gesagt, muss dazu Ihre Datei test.php
im Verzeichnis htdocs
liegen.
11.3.2 PHP und HTML
PHP wurde dazu entwickelt, innerhalb von HTML-Dateien bestimmten "Regionen" automatisch zu befüllen. Daher kann man PHP-Code einfach in ein HTML-Dokument einfügen. Der PHP-Code wird dann ausgeführt und durch die Ausgabe (per echo
) ersetzt. Die Datei muss dennoch die Endung .php
haben.
Wir erzeugen eine neue Datei test2.php
im Verzeichnis htdocs
und schreiben folgenden Mix aus HTML und PHP:
<!DOCTYPE html>
<html>
<body>
<?php
echo 'hello world';
?>
</body>
</html>
In der Datei wird zunächst der PHP-Teil ausgewertet und durch das Resultat ersetzt. Erst dann wird die Datei an den Browser weitergegeben. Wenn Sie die Datei im Browser öffnen und sich den Quelltext anschauen, sehen Sie entsprechend kein PHP mehr, denn beim Client kommt nur das Resultat der Ersetzungen an:
<!DOCTYPE html>
<html>
<body>
hello world
</body>
</html>
Der Client sieht also gar nicht, woher das "hello world" ursprünglich kam (aus einem Stückchen PHP-Code). Das ist ein großer Vorteil serverseitiger Programmierung: es werden fertige HTML-Dateien ausgeliefert, ohne dass Code sichtbar ist, der evtl. ausspioniert oder kopiert werden könnte und der z. B. sensible Infos wie Passwörter beinhalten könnte.
Sie können im PHP-Code auch HTML-Tags einarbeiten:
<?php
echo '<h1>hello world</h1>';
?>
Entsprechend steht später im HTML-Code:
<h1>hello world</h1>
Im Browser sehen Sie (Datei test2.php
):
PHP an verschiedenen Stellen
PHP kann an beliebigen Stellen im HTML vorkommen. Hier sehen Sie PHP z. B. bei den CSS-Stilangaben bei color
:
<!DOCTYPE html>
<html>
<head>
<style media="screen">
h1 {
color: <?php echo 'blue' ?>;
}
</style>
</head>
<body>
<?php
echo '<h1>hello world</h1>';
?>
</body>
</html>
Kommentare
Zeilenkommentare werden mit #
gekennzeichnet:
<?php
# Zeilenkommentar
echo '<h1>hello world</h1>';
?>
Blockkommentare können mehrere Zeilen umfassen und werden mit /*
und */
eingeklammert:
<?php
/*
Längere Angelegenheit
über zwei Zeilen
*/
echo '<h1>hello world</h1>';
?>
11.3.3 Dateien einbinden
Eine sehr wichtige Vorgehensweise in PHP ist das Auslagern von Code, der von mehreren Dateien benötigt wird. Wenn wir z. B. den Header einer Datei in eine separate Datei "header.php" auslagern, benötigen wir den Befehl include
, um diesen Code in die aktuelle Datei einzubinden.
Befinden wir uns also in einer Datei und möchten den Code von "header.php" einbinden, schreiben wir:
<?php
include 'header.php';
?>
Die Datei muss sich im Beispiel im gleichen Verzeichnis befinden. Wenn sich die Datei im Elternverzeichnis (also "eins drüber") befindet, schreiben wir:
<?php
include '../header.php';
?>
Wenn sich die Datei im Unterzeichnis private
vom Elternverzeichnis befindet, schreiben wir:
<?php
include '../private/header.php';
?>
Wichtig: Es ist empfohlen, an solchen Stellen immer einfache Anführungszeichen zu verwenden, weil der Ersetzungsmechanismus bei doppelten Anführungszeichen zu Sicherheitsproblemen führen kann.
require und require_once
Statt include
können Sie auch require
verwenden. Bei letzterem wird eine Fehlermeldung ausgegeben, wenn die Datei nicht vorhanden ist. require
wird häufig benutzt, um z. B. eine Bibliothek von eigenen Hilfsfunktionen einzubinden.
<?php
require 'functions.php';
?>
Gerade bei Funktionen sollte man darauf achten, dass man diese nur einmal lädt. Dafür gibt es require_once
und include_once
. PHP checkt also vorher, ob die Datei bereits geladen wurde und ignoriert die Anweisung in diesem Fall:
<?php
require_once 'functions.php';
?>
11.4 Daten
11.4.1 Variablen
Sie können in PHP auch Variablen verwenden. Variablen müssen mit einem Dollarzeichen beginnen und können u. a. Zahlen und Strings enthalten.
Im Gegensatz zu Java müssen Sie bei PHP keinen Typ angeben. Stattdessen "errät" PHP den Typ.
<?php
$foo = 'Harry';
$bar = 'Sally';
$num = 42;
?>
Im obigen Beispiel sind die Variablen $foo
und $bar
vom Typ String, wohingegen $num
eine ganze Zahl ist.
Sie haben in PHP die folgenden (primitiven) Datentypen:
- String
- Integer
- Float
- Boolean
Eine boolesche Variable kann - wie in Java - die Werte true
oder false
enthalten.
Rechenoperationen
Variablen kann man auch mit Zahlen füllen und man kann Rechenoperationen durchführen:
<?php
$x = 5;
$y = 6;
$z = $x + $y;
?>
Wie in Java gibt es die Operatoren +=
und ++
und die entsprechenden Operatoren für die anderen Operationen, also -=
, *=
, /=
, und natürlich das --
.
11.4.2 Strings
Strings sind in PHP besonders wichtig, da es bei PHP ursprünglich darum ging, Textschnipsel für das finale HTML-Dokument zu erzeugen.
String-Konkatenation
Um Strings aneinander zu reihen, verwenden Sie den Punkt. Das ist also wie das Plus-Zeichen in Java und nennt sich String-Konkatenation:
<?php
$foo = 'Harry';
$bar = 'Sally';
echo 'We are ' . $foo . ' and ' . $bar;
?>
Einfache und doppelte Anführungszeichen
Eine Besonderheit ist, dass Sie die Variablen auch innerhalb des Strings verwenden können:
<?php
$foo = 'Harry';
$bar = 'Sally';
echo "We are $foo and $bar";
?>
Dies geht allerdings nur bei doppelten Anführungszeichen (engl. double quotes). Dort sucht und ersetzt PHP Variablen innerhalb des Strings. Der obige String wird also zu:
We are Harry and Sally
Bei einfachen Anführungszeichen (single quotes) werden Variablen nicht ersetzt:
echo 'We are $foo and $bar';
wird zu:
We are $foo and $bar
Manchmal ist es sinnvoll, einfache und doppelte Anführungszeichen zu kombinieren, z. B. wenn Sie ein HTML-Element ausgeben wollen, das Anführungszeichen beinhaltet:
<?php
echo '<img src="img/foo.png" alt="Bild eines Foo" />';
?>
Sie können sowohl doppelte Anführungszeichen innerhalb von einfachen verwenden als auch umgekehrt einfache innerhalb von doppelten.
Maskieren von Zeichen
Bei einfachen Anführungszeichen stellt sich die Frage, ob man auch ein einfaches Anführungszeichen ausgeben kann:
echo 'das Wort 'laufen' ist ein Verb.';
Wir haben hier das Problem, dass PHP denkt, dass nach dem zweiten Anführungszeichen der String zu Ende ist. Also müssen wir die "inneren" Anführungszeichen kennzeichnen - das nennt man auch maskieren - und zwar mit einem vorangestellten Backslash:
echo 'das Wort \'laufen\' ist ein Verb.';
Das zweite Zeichen, das wir maskieren können, ist der Backslash selbst:
echo 'das Zeichen \\ nennt man einen Backslash.';
Diese beiden Zeichen sind bei Strings mit einfachen Anführungszeichen die einzigen maskierbaren Zeichen.
Bei Strings mit doppelten Anführungszeichen haben wir noch viele weitere maskierbare Zeichen:
\" für doppelte Anführungszeichen
\n für Zeilenumbruch
\t für Tabulator
Schauen Sie gern im PHP Manual / Strings nach weiteren Infos zu diesem Thema.
11.4.3 Arrays
In einem Array kann man eine Reihe von Daten speichern und systematisch (in der Regel mit einer Schleife) auf diese Elemente zugreifen. In PHP gibt ein zwei Arten von Arrays. Indizierte Arrays sind ähnlich zu den Arrays, die Sie von Java kennen. Allerdings können Sie in PHP einen Array jederzeit erweitern, d. h. ein Array in PHP funktioniert auch wie eine Liste in Java (z. B. die Klasse ArrayList
).
Assoziative Arrays entsprechen den assoziativen Arrays in JavaScript oder einer Hashtabelle in Java (z. B. die Klasse HashMap
). Bei einem assoziativen Array verwendet man keine Indexzahlen für den Zugriff, sondern einen String.
Indizierte Arrays
Ein Array enthält eine Reihe von Daten, die mit Indexzahlen durchnummeriert sind - beginnend mit 0.
Einen neuen Array erstellt man wie folgt:
$arr = array('bla', 'blubb', 'blabla');
Im Gegensatz zu Java, kann man in PHP einen Array jederzeit erweitern. Um ein neues Element an das Ende des Arrays anzufügen, schreibt man:
$arr[] = 'blip';
Man kann auch einen leeren Array erstellen und anschließend befüllen:
$arr = array();
$arr[] = 'bla';
$arr[] = 'blubb';
$arr[] = 'blabla';
Auf Einzelelemente greift man - wie in Java - mit eckigen Klammern und dem Index zu. Um das zweite Element auszugeben, schreibt man:
echo $arr[1];
Die Länge des Arrays bekommt man mit der Funktion count
:
echo count($arr);
Eine Schleife zum Durchlaufen eines Arrays kann man sehr elegant mit der Foreach-Schleife formulieren (hier wird $a
als Laufparameter deklariert):
foreach ($arr as $a) {
echo $a . ' ';
}
Das Durchlaufen eines Arrays nennt man auch Traversieren.
Man kann auch eine reguläre For-Schleife verwenden:
for($i = 0; $i < count($arr); $i++) {
echo $arr[$i] . ' ';
}
Assoziative Arrays
Assoziative Arrays funktionieren ähnlich wie in JavaScript. Typisches Beispiel ist ein Telefonbuch vor, wo Namen und Telefonnummern gespeichert werden. Der Zugriff auf eine Nummer soll hier über den Namen laufen.
In PHP erstellt man einen assoziativen Array wie folgt:
$tel = array("Heinz Schmidt" => "4561", "Laura Kaiser" => "3355", "Donna Leon" => "4321");
Man nennt die eigentliche Information im Array den Wert (hier die Telefonnummer) und den Zugriffs-String den Schlüssel (hier der Name). Die Pfeile sollen andeuten, dass es sich hier um eine Abbildung von Schlüssel auf Wert handelt. Wie immer ist es egal, ob Sie einfache oder doppelte Anführungszeichen verwenden.
Der Zugriff auf ein Einzelelement erfolgt über den Schlüssel. Die Schreibweise ist exakt so wie in JavaScript:
echo 'Lauras Nummer ist: ' . $tel['Laura Kaiser'];
Anders als in JavaScript gibt es in PHP eine spezielle Foreach-Schleife, um alle Schlüssel und Werte gleichzeitig zu durchlaufen. Man definiert zwei Laufvariablen für jeweils Schlüssel und Wert.
foreach ($tel as $name => $nummer) {
echo $name . ' hat Nummer ' . $nummer . ' ';
}
11.4.4 Konstanten
Konstanten werden - wie in Java - komplett großgeschrieben und mit dem Befehl define
gesetzt. Ungewöhnlich ist, dass der Name der Konstanten in Anführungszeichen gesetzt werden muss (einfach oder doppelt):
define("MEANING_OF_LIFE", 42);
Sie sehen, dass hier kein Dollarzeichen nötig ist. Ansonsten kann man Konstanten wie normale Variablen einsetzen:
$x = 10 * MEANING_OF_LIFE;
echo 'Meaning of life: ' . MEANING_OF_LIFE;
Nicht verwenden kann man die Variablenersetzung bei doppelten Anführungszeichen:
echo "Meaning of life: MEANING_OF_LIFE";
Wird zu
Meaning of life: MEANING_OF_LIFE
11.4.5 Superglobale Variablen
Es gibt eine Reihe von Systemvariablen, die aus jedem Kontext aus erreichbar sind, und die superglobale Variablen oder engl. einfach superglobals genannt werden. Die Variablen enthalten System- oder Prozessinformationen in Form von assoziativen Arrays.
Die häufigste Anwendung ist das Auslesen der Benutzereingabe über Formulare, deren Inhalte über HTTP verschickt und empfangen werden (zur Anwendung kommen dann die Superglobals $_GET oder $_POST).
Eine gute Übersicht über Superglobals finden Sie auch bei https://www.w3schools.com/php/php_superglobals.asp.
Die Variable $GLOBALS
enthält zum Beispiel alle globalen Variablen und ihre Werte. Haben Sie z. B. die globale Variable $foo
, so können Sie sie mit
echo $GLOBALS['foo'];
auslesen und mit
$GLOBALS['foo'] = 42;
neu setzen.
Weitere superglobale Variablen liefern von Systemseite Informationen über den Web-Kontext:
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
Sie können z. B. mit
echo $_SERVER['SERVER_NAME'];
den Namen des Servers ausgeben lassen, auf dem der PHP-Code ausgeführt wurde (z. B. 'www.hs-augsburg.de').
Am häufigsten kommen diese Variablen in Zusammenhang mit Web-Formularen und den daraus resultierenden HTTP-Requests vor, wie wir im nächsten Kapitel sehen werden.
11.5 Kontrollfluss
11.5.1 Bedingte Anweisungen
If-Anweisung
Es gibt wie in Java das einfache if
, das if-else
und das if-else-if
. In der Bedingung nutzen Sie wie in Java Vergleichsoperatoren wie >
, <
, >=
und <=
. Um auf Gleichheit zu prüfen, verwenden Sie das doppelte Gleichheitszeichen ==
, für Ungleichheit mit Negationszeichen !=
.
Ein Beispiel für if
:
$is_male = true;
$name = 'Müller';
$greeting = 'Hallo, Frau ' . $name;
if ($is_male) {
$greeting = 'Hallo, Herr ' . $name;
}
Ein Beispiel für ein if-else
:
$is_male = true;
$name = 'Müller';
if ($is_male) {
$greeting = 'Hallo, Herr ' . $name;
} else {
$greeting = 'Hallo, Frau ' . $name;
}
Und noch ein Beispiel für ein if-else-if
:
$points = 95;
if ($points > 90) {
echo 'Klausur mit Auszeichnung bestanden.';
} else if ($points > 70) {
echo 'Klausur gut bestanden.';
} else if ($points > 50) {
echo 'Klausur bestanden.';
} else {
echo 'Leider durchgefallen.';
}
Gleichheit prüfen mit == oder ===
In PHP gibt es zusätzlich zum Vergleichsoperator ==
noch den Operator ===
(und analog die Negation !==
). Der Unterschied ist, dass bei ==
der Wert der beiden Seiten vergleichen wird, unabhängig vom Typ. Steht also links eine Zahl und rechts ein String
'42' == 42
wird das ganze dennoch als true
gewertet.
Beim dreifachen Gleichheitszeichen ===
muss auf beiden Seiten sowohl der Wert als auch der Typ übereinstimmen. Hier kommt also false
raus:
'42' === 42
Und hier true
:
42 === 42
Ternärer Operator
Wie in Java gibt es den ternären Operator, der eine If-Anweisung durch ein kurzes Konstrukt ersetzt.
Nehmen wir an, wir haben zwei Variablen
$is_male = true;
$name = 'Müller';
Dann können wir eine individuelle Begrüßung erzeugen mit
if ($is_male) {
$greeting = 'Hallo, Herr ' . $name;
} else {
$greeting = 'Hallo, Frau ' . $name;
}
Mit dem ternären Operator geht das viel kürzer:
$greeting = ($is_male ? 'Hallo, Herr ' : 'Hallo, Frau ') . $name;
Allgemein ist die Form des ternären Operators:
[Bedingung] ? [Ausdruck A] : [Ausdruck B]
11.5.2 Schleifen
While-Schleife
While-Schleifen sehen exakt so aus wie in Java:
$i = 0;
while ($i < 10) {
echo $i . ' ';
$i++;
}
For-Schleife
Auch For-Schleifen können Sie wie in Java formulieren. Sie müssen nur daran denken, dass man in PHP bei Variablen keinen Typen voranstellt, also auch nicht im Kopf der For-Schleife:
for ($i = 0; $i < 10; $i++) {
echo $i . ' ';
}
11.5.3 Funktionen
Wie in Java gibt es in PHP Funktionen. Die Definition einer Funktion wird mit dem Schlüsselwort function
gekennzeichnet:
function sayHello() {
echo 'hello world';
}
Der Aufruf der Funktion sieht dann z. B. so aus:
<h1>
<?php sayHello(); ?>
</h1>
Wichtig: Nie das Semikolon vergessen!
Parameter
Funktionen können Parameter haben (mehere Parameter werden durch Komma getrennt):
function sayHello($anrede, $person) {
echo 'Hello, ' . $anrede . ' ' . $person . '!';
}
Der Aufruf:
<h1>
<?php sayHello('Frau Dr.', 'Schmidt'); ?>
</h1>
Wie schon bei den Variablen tauchen hier keine Typen auf, weder bei den Parametern noch in Form eines Rückgabetyps.
Rückgabewert
Natürlich können wir - wie in Java - Werte zurückgeben und tun dies - ebenfalls wie in Java - mit dem Schlüsselwort return
.
function add($num1, $num2) {
return $num1 + $num2;
}
Ein möglicher Aufruf:
<p><?php echo '1 plus 2 ist ' . add(1,2); ?></p>
Wohin mit den Funktionen?
Da Ihre Funktionen häufig in mehreren Dateien benötigt werden, ist es üblich, eine eigene Datei (oder mehrere) mit Funktionen anzulegen. Zum Beispiel in einem Unterverzeichnis private
die Datei functions.php
.
Sie müssen dann in der Datei, in der Sie die Funtionen nutzen wollen, die Datei functions.php
einbinden, indem Sie zu Beginn Ihrer Datei schreiben:
<?php
include 'private/functions.php';
?>
Denken Sie daran, dass Sie auch in functions.php
den Rahmen mit <?php ... ?>
definieren müssen:
<?php
function sayHello($anrede, $person) {
echo 'Hello, ' . $anrede . ' ' . $person . '!';
}
function add($num1, $num2) {
return $num1 + $num2;
}
?>
11.6 Dateien
Sie können in PHP Dateien erzeugen und in die Dateien schreiben bzw. aus Ihnen lesen. Diese Dateien befinden sich natürlich dann auf dem Server und sind für den Endbenutzer (Client) nicht ohne weiteres sichtbar.
Dateien müssen immer erst geöffnet und dann vollzogener Operation (es können auch mehrere sein) geschlossen werden.
Öffnen
Das Öffnen einer Datei kann verschiedene Ziele haben, z. B. eine Datei neu zu erzeugen, eine Datei zu überschreiben oder etwas an eine vorhandene Datei anzuhängen. Dies nennt man auch den Modus des Öffnens.
Zum Öffnen gibt es den Befehl fopen
. Sehen wir uns ein Beispiel an, wo eine Datei zum Schreiben (engl. write) geöffnet wird und daher als Modus "w" angegeben wird. Sollte die Datei nicht existieren, wird sie neu erzeugt. Sollte sie existieren, wird sie überschrieben.
<?php
$file = fopen("mydata.txt", "w") or die("Konnte Datei nicht öffnen!");
...
fclose($file);
?>
Die Klausel or die
sorgt im Fehlerfall für eine Ausgabe, genauer gesagt: der angegebene String wird an diese Stelle gesetzt (ähnlich wie bei echo
).
Der Befehl fopen
gibt einen Zeiger auf die geöffnete Datei zurück, den wir uns in einer Variablen merken. Nach Abschluss unserer Operation(en) schließen wir diese Datei dann mit fclose
. Beachten Sie, dass, wenn Sie die Datei nicht schließen, Datenverlust oder Ressourcenprobleme auftreten können.
Die wichtigsten Modi sind:
- "r": nur Lesen
- "r+": Lesen und Schreiben
- "w": nur Schreiben, Datei wird - falls nicht vorhanden - erzeugt
- "w+": Schreiben und Lesen, Datei wird - falls nicht vorhanden - erzeugt
- "a": nur Schreiben, neuer Text wird hinten angehängt (engl. append), Datei wird - falls nicht vorhanden - erzeugt
- "a+": Lesen und Schreiben, neuer Text wird hinten angehängt (engl. append), Datei wird - falls nicht vorhanden - erzeugt
Beachten Sie, dass bei "w" und "w+" der vorhandene Inhalt überschrieben wird. Verwenden Sie "a" oder "a+", wenn Sie Inhalte anhängen möchten.
Eine vollständige Liste möglicher Modi finden Sie im PHP-Handbuch.
Schreiben
Möchten Sie eine Datei beschreiben, öffnen Sie die Datei in einem schreibfähigen Modus. Wir wählen "a". Dies erzeugt die Datei, falls sie noch nicht existiert und hängt dann Inhalte immer an den bestehen Text an.
Wir verwenden das Kommando fwrite
, um einen Text in die Datei zu schreiben und schließen die Datei anschließend.
<?php
$file = fopen("mydata.txt", "a") or die("Konnte Datei nicht öffnen!");
fwrite("Hello, world!");
fclose($file);
?>
Lesen
Möchten Sie aus einer Datei lesen, öffnen Sie die Datei in einem lesefährigen Modus (z. B. "r" oder "w+"). Die Datei muss existieren, sonst tritt ein Fehler auf (den behandeln wir hier wieder mit or die
). Das Lesen erfolgt mit fgets
. Dieser Befehl liest eine Zeile der Datei, also müssen Sie mit Hilfe einer Schleife alle Zeilen auslesen. Dabei hilft die Abfrage feof
(engl. end of file), die dann true wird, wenn das Dateiende erreicht ist.
<?php
$file = fopen("mydata.txt", "r") or die("Konnte Datei nicht öffnen!");
while(!feof($file)) {
echo fgets($file);
}
fclose($file);
?>
Wir verwenden echo
, um die jeweilige Zeile direkt auszugeben. Vergessen Sie auch hier nicht, die Datei wieder zu schließen.