Einführung
Bei PHP handelt es sich wohl um die beliebteste und verbreitetste Skriptsprache für die dynamische Erstellung von Webseiten. Die Abkürzung PHP ist ein rekursives Akronym und steht für „PHP: Hypertext Preprocessor“.
PHP stellt keineswegs einen Ersatz für HTML dar, sondern ermöglicht es den HTML-Code, welcher an den Browser gesendet werden soll, vor dem Versand auf dem Server mit aktuellen und dynamischen Informationen zu füllen. Diese Informationen können dabei von Formularen, URL-Parametern, aus Dateien oder aus einer Datenbank kommen. Des Weiteren können die mittels Formularen versendeten Daten verarbeitet werden und dann ggf. in Dateien oder einer Datenbank abgelegt oder per E-Mail versendet werden.
PHP ist eine relativ einfach zu erlernende Sprache, die jedoch ebenfalls viele Möglichkeiten bietet, um somit auch professionelle und große Webanwendungen erstellen zu können. Der Syntax von PHP lehnt sich dabei an die Sprachen C und Perl an.
PHP-Code wird für gewöhnlich in Dateien mit der Endung .php gespeichert. In diesen Dateien ist jedoch zumeist neben PHP-Code auch
HTML-Code zu finden. Der PHP-Code wird von einem Interpreter auf dem Webserver verarbeitet. Dadurch wird der PHP-Code nicht
an den Browser gesendet, sondern lediglich der in der Datei ebenfalls enthaltene HTML-Code sowie die Ausgaben, welche in PHP mittels
des Befehls echo
oder print
(dazu weiter unten mehr) ausgeführt wurden.
Geschichte
Die erste Version von PHP erschien 1995 und wurde von Rasmus Lerdorf entwickelt. Die Abkürzung stand damals für „Personal Home Page Tools“. 1996 wurde PHP/FI veröffentlicht, welche heute als PHP-Version 2 gilt. PHP/FI (FI = Form Interpreter) war eine weitaus umfangreichere Version wie die 1. Version. Die Sprache war damals Perl sehr ähnlich.
1998 erschien eine komplett neue Version von PHP (PHP3). Die Entwicklung erfolgte durch Andi Gutmans und Zeev Suraski, die mit Rasmus Lerdorf kooperierten. Mit PHP3 wurde neben der kompletten Neuprogrammierung des Sprachkerns auch die Bedeutung der Abkürzung in das heute bekannte „PHP: Hypertext Processor“ geändert, um somit die Verwendung für lediglich private Zwecke aus dem Namen zu entfernen.
1999 gründeten Gutmans und Suraski die Firma Zend Technologies. Diese entwickelte unter anderem den Zend Engine, bei welchem es sich um den Interpreter und somit um das Herzstück des heutigen PHPs handelt. Weitere bekannte Produkte der Firma sind Zend Server und Zend Studio. Im Jahre 2000 wurde PHP4 veröffentlicht. Als Interpreter wird ab nun der Zend Engine verwendet.
Im Sommer 2004 wurde PHP5 veröffentlicht. PHP5 enthält diverse Verbesserungen und Erweiterungen wie z. B. die neue API MySQLi. Durch die Verwendung des Zend Engine 2 wurde der Sprachkern nochmals erweitert. Der Schwerpunkt liegt seither vor allem auf der objektorientierten Programmierung.
Seit Ende 2015 ist PHP7 verfügbar. PHP6 sollte ein früher Nachfolger von PHP5 werden. PHP6 sollte dabei eine Unterstützung verschiedener Unicode-Standards mit sich bringen. Die Entwicklung von PHP6 wurde auf Grund von Problemen bei der Implementierung 2010 eingestellt. PHP7 enthält einige Fehlerbehebungen, die Unterstützung von 64-Bit-Systemen und eine um bis zu über 30 Prozent geringere Ausführungszeit. Es wurden einige Änderungen durchgeführt, wodurch die Sprache zwar klarer definiert ist und keine unnötigen alten Bestandteile von Vorgängerversionen mit sich bringt, jedoch eine volle Abwärtskompatibilität zu PHP5 nicht mehr besteht.
Wichtig: Alle in unserem Tutorial vorgestellten Funktionen sowie alle Beispiele sind sowohl unter PHP5 als auch unter PHP7 ausführbar.
Übrigens: Der Zend Engine sowie die Betreuung und Verwaltung von PHP erfolgt heute durch die Entwicklergruppe „The PHP Group“, welcher unter anderem Rasmus Lerdorf, Andi Gutmans und Zeev Suraski angehören. Der Zend Engine wird weiterhin durch die Firma Zend Technologies gesponsert.
Webserver
Für die Ausführung von PHP-Skripten ist ein PHP-Interpreter, normalerweise der Zend Engine, vonnöten. Der Interpreter analysiert das Skript und führt die dort angegebenen Anweisungen aus. Dieser Interpretierungsvorgang muss bei jedem Skriptaufruf erneut durchgeführt werden. Ab PHP 5.5 enthält die PHP-Installation den Zend Optimizer+, welcher den vom Interpreter erstellten Zwischencode puffert, um somit während eines zweiten Interpretierungsvorgangs Zeit zu sparen. Dadurch muss die Datei nämlich nicht mehr erneut analyisiert werden, sondern lediglich der erstellte Zwischencode ausgeführt werden.
Zur Ausführung von PHP-Skripten wird üblicherweise ein Webserver verwendet. Die Webserver-Software (z. B. der freie Apache HTTP Server oder der kostenpflichtige Microsoft Internet Information Services (IIS)) kommuniziert dann über eine Schnittstelle mit dem PHP-Interpreter. Die Anfrage an den Webserver für eine PHP-Datei läuft wie folgt ab:
- Besucher sendet Anfrage an den Webserver.
- Webserver gibt die Datei an den PHP-Interpreter weiter. Diese Datei enthält dabei zumeist neben HTML-Code auch einen PHP-Code.
- PHP-Interpreter erzeugt eine temporäre Ausgabedatei. Dabei werden die Befehle des PHP-Codes ausgeführt. Alle Ausgaben die in PHP ausgeführt wurden, werden in den HTML-Code eingefügt.
- Die temporäre Ausgabedatei wird an den Besucher zurückgesendet. Die Datei enthält keinerlei PHP-Code mehr.
Um Webseiten (mit PHP) zu entwickeln, benötigen wir also einen Webserver. Hierbei ist es hilfreich, wenn man einen lokalen Webserver hat, denn zum einen geht dies wesentlich schneller, als wenn man seine Änderungen immer direkt auf einen Server hochladen muss und zum anderen sollten „unfertige“ Änderungen nicht veröffentlicht werden und somit für andere zugänglich sein.
Für die PHP-Entwicklung ist das Software-Paket XAMPP (X = Windows, Linux, Mac OS und Solaris, A = Apache, M = MySQL / MariaDB, P = Perl,
P = PHP) zu empfehlen. XAMPP ist ein Programm von Apache Friends und kann von deren Website
heruntergeladen werden. Neben den bisher genannten Komponenten enthält XAMPP FileZilla bzw. ProFTPd (FTP-Server), Mercury (E-Mail-Server),
phpMyAdmin (Administration von Datenbanken), Apache Tomcat (nur bei Windows) und OpenSSL. XAMPP dient lediglich zu Entwicklerzwecken
und sollte nicht auf öffentlichen Webservern eingesetzt werden. Dies kommt vor allem auf Grund von vernachlässigten Sicherheitsmaßnahmen.
Nach dem Download und der Installation von XAMPP können wir das Control Panel öffnen. Dort befinden sich nun Buttons zum Starten
der verschiedenen Dienste. Vorerst müssen wir lediglich den Webserver Apache starten. Die Kommunikation zwischen Apache und dem PHP-Interpreter
funktioniert sofort und muss nicht konfiguriert werden. Später, wenn wir mit Datenbanken arbeiten, müssen wir dort noch den Datenbank-Server
MySQL bzw. MariaDB starten. Unsere PHP-Dateien (und andere Dateien die zur Website gehören) legen wir dabei im Ordner htdocs
im
Installationsverzeichnis von XAMPP (z. B. C:\xampp\
) ab. Um auf die Website zuzugreifen, rufen wir im Browser die Adresse
localhost
(ggf. gefolgt von dem Dateinamen) auf. Alternativ kann auch die IP-Adresse des Rechners oder 127.0.0.1
verwendet werden. Ein Aufruf der Website von einem anderen Computer des Netzwerks ist ebenfalls möglich.
Um ein paar Informationen über den Webserver bzw. den PHP-Interpreter und deren Komponenten zu bekommen, gibt es die sogenannte
PHP-Info. Um diese anzuzeigen, kopieren wir folgenden Code in eine Datei (z. B. info.php
) und legen diese
im htdocs
-Ordner ab:
<?php phpinfo(); ?>
Rufen wir diese Datei in unserem Browser auf, so erscheinen mehrere lange Tabellen, in welcher alle möglichen Informationen zum Zend Engine, zur PHP-Konfiguration, zu den PHP-Variablen (dazu später mehr) und den installierten Komponenten zu finden sind. Auf Grund der sensiblen Informationen, die in dieser Ausgabe enthalten sind, sollten Sie diese Datei niemals auf einem öffentlichen Webserver ablegen bzw. liegen lassen.
Platzierung
PHP-Code befindet sich üblicherweise in Dateien mit der Endung .php. php-Dateien enthalten entweder nur PHP-Code (z. B. für ausgelagerte
Funktionen und Objekte) und werden dann von anderen PHP-Dateien inkludiert (also „eingebunden“) oder enthalten PHP-Code zusammen mit
HTML-Code. PHP-Code muss sich immer innerhalb des Tags <?php
und ?>
befinden. Je nach Einstellung von PHP
ist auch die verkürzte Schreibweise <?
am Anfang möglich. Die PHP-Tags können innerhalb eines HTML-Codes bzw. innerhalb der
Datei mehrmals verwendet werden.
Auf Grund des MVC-Konzepts (Model, View, Controller) sollte darauf geachtet werden, HTML und PHP nicht zu stark zu mischen. Genauso wie man eben HTML mit CSS und HTML mit JavaScript nicht zu stark mischen sollte. Aber was heißt das konkret? Das Modell der Seite sollte lediglich in HTML angegeben werden. Überall dort, wo nun dynamische Inhalte dargestellt werden sollen, wird nun der PHP-Code notiert. Dieser muss dafür natürlich innerhalb der PHP-Tags stehen. Ein kurzes Beispiel hierzu:
<!Doctype html> <html> <head> <title>Aktuelle Artikel</title> </head> <body> <header> <img src="/Bilder/Banner/Start-Banner.jpg" alt="Banner" title="Homepage-Webhilfe" /> </header> <nav> <ul> <li><a href="/">Startseite</a></li> <li><a href="/Aktuelle-Artikel/"><b>Aktuelle Artikel</b></a></li> <li><a href="/Beliebte-Artikel/">Beliebte Artikel</a></li> <li><a href="/Kontakt/">Kontakt</a></li> <li><a href="/Impressum/">Impressum</a></li> </ul> </nav> <main> <div id="zeit"> <?php // Ausgabe der aktuellen Serverzeit ?> </div> <p>...</p> <?php // Laden der aktuellen Artikel aus einer Datenbank und anzeigen ?> </main> <footer> Copyright 2016 by Homepage-Webhilfe - All rights reserved! </footer> </body> </html>
Variablen und Datentypen
PHP kennt 6 grundlegende Datentypen: boolean
, integer
, float
, String
, Array
und Object
.
Der Datentyp boolean
stellt einen Wahrheitswert dar und kennt nur zwei verschiedene Werte: true
(wahr) und
false
(unwahr). Die Groß- und Kleinschreibung spielt dabei keine Rolle.
Der Datentyp integer
stellt eine Ganzzahl mit Vorzeichen dar. Der Minimal- und Maximalwert ist plattformabhängig, ein
Wertebereich von -2^31 bis +(2^31)-1 sollte jedoch zumeist gegeben sein. Auf 64-Bit Systemen ist hingegen zumeist ein Wertebereich von
-2^63 bis +(2^63)-1 verfügbar.
Mit dem Datentyp float
ist es möglich, Gleitkommazahlen (Zahlen mit Nachkommastellen) darzustellen. Der verfügbare
Wertebereich ist ebenfalls plattformabhängig. Zumeist stehen Gleitkommazahlen mit doppelter Genauigkeit (64-Bit) nach IEEE 754 zur Verfügung.
Bei der Angabe von Gleitkommazahlen im Programmcode muss beachtet werden, dass der Punkt als Trennung zwischen Ganzzahl und Nachkommastellen
verwendet wird und nicht, wie in Deutschland üblich, das Komma.
Zeichenketten (Datentyp String
) stellen eine Aneinanderreihung (auch als Kette oder Reihe bezeichnet) von Zeichen dar.
Die Kette kann dabei aus keinem, einem oder mehreren Zeichen bestehen. Angegeben werden Zeichenketten in einfachen oder doppelten
Anführungszeichen. Im Normalfall werden Zeichenketten in einfachen Anführungszeichen notiert. Möchten Sie innerhalb einer solchen Zeichenkette
ein einfaches Anführungszeichen in die Zeichenkette integrieren, so müssen Sie dieses Zeichen mit einem Backslash \
maskieren.
Eine Zeichenkette, welche in doppelte Anführungszeichen eingeschlossen ist, erlaubt es, sogenannte Escape-Sequenzen auszugeben.
Hierzu zählen z. B. \r
für einen Wagenrücklauf (CR), \n
für einen Zeilenvorschub (LN) und \t
für einen
Tabulator. Variablennamen können direkt innerhalb einer Zeichenkette, welche in doppelten Anführungszeichen angegeben wurden, notiert werden,
um diese mit dem Rest der Zeichenkette zu verketten. Als bessere Praxis gilt jedoch die Verkettung von Zeichenketten mit Variablen.
Der Datentyp Array
stellt eine Liste und „geordnete Map“ dar. Mit diesem „speziellen“ Datentyp wollen wir uns jedoch erst
später genauer beschäftigen.
Zuletzt gibt es noch, wie bereits oben erwähnt, den Datentyp Object
. Wie man eigene Klassen definiert und daraus Objekte
erzeugt, lernen Sie ebenfalls später.
Mittels des Werts null
ist es möglich, eine Variable als Variable ohne Datentyp und Wert zu kennzeichnen. Eingesetzt
wird null
an verschiedenen Stellen, welche Sie ebenfalls innerhalb des Tutorials und der nächsten Seiten kennenlernen werden.
PHP besitzt eine dynamische Typisierung, weshalb der Datentyp einer Variablen nicht explizit angegeben werden muss. Trotzdem existieren die jeweiligen Datentypen. Der Datentyp einer Variablen wird also automatisch, je nach zugewiesenem Wert, bestimmt. Variablen existieren ab dem Zeitpunkt, wo sie zum ersten Mal zugewiesen werden. Eine Variable kann in PHP nicht direkt deklariert werden. Die Deklarierung (sozusagen das Erstellen der Variable) erfolgt automatisch mit der ersten Zuweisung (auch als Variableninitialisierung bezeichnet).
Variablen kennzeichnen sich durch das vorangestellte Dollarzeichen $
. Der Name einer Variablen ist frei wählbar,
jedoch muss dieser innerhalb des sogenannten Scopes (Geltungsbereich) eindeutig sein. Wird ein Variablenname innerhalb des
gleichen Scopes mehrmals verwendet, so löst dies in PHP keinen Fehler aus, sondern überschreibt lediglich den Wert der Variablen. Der
Geltungsbereich einer Variablen erstreckt sich über den aktuellen Block und deren untergeordneten Blöcke (dazu gleich
mehr). Eine „Ausnahme“ gilt bei globalen Variablen, auf welche wir im Thema Funktionen eingehen werden.
Um einer Variablen einen Wert zuzuweisen, wird der Zuweisungsoperator verwendet, welcher sich durch das einfache Gleichheitszeichen
=
kennzeichnet. Bei Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden.
<?php $wahrheit = true; $ganzzahl = 123; $gleitkomma = 123.45; $zeichenkette1 = 'Hallo'; $zeichenkette2 = "Hallo"; ?>
Syntax
Bevor wir uns im nächsten Abschnitt und in den nächsten Themen der Programmierung in PHP widmen, wollen wir uns zuerst mit dem grundlegenden Syntax von PHP beschäftigen. Der Syntax stellt eine Art Regelwerk für die Zusammenstellung von Zeichen dar.
Blöcke werden dazu genutzt, einen bestimmten Programmcode zu gruppieren. Benutzt werden solche Blöcke selten alleine, sondern zumeist in Kombination mit einer Abfrage, Schleife, Funktion oder einem Objekt. Ein Block wird in PHP mittels eines geschweiften Klammernpaars angegeben.
<?php { // Dies ist ein Block } ?>
Neben den geschweiften Klammern kommen in PHP auch runde Klammern und eckige Klammern zum Einsatz. Runde Klammern werden bei Funktionen, Schleifen und Abfragen benötigt. Zudem können runde Klammern zum Gruppieren verwendet werden (z. B. bei Bedingungen oder bei Berechnungen). Eckige Klammern kommen bei der sogenannten Indizierung von Arrays zum Einsatz. Für alle Klammern gilt: Es gibt immer eine öffnende Klammer und eine schließende Klammer. Alle Klammern müssen in umgekehrter Reihenfolge geschlossen werden, wie diese zuvor geöffnet wurden.
Bei Variablenzuweisungen, Ausgaben, Funktionsaufrufen oder anderen Schlüsselwörtern handelt es sich um sogenannte Anweisungen
(engl. Statements). Anweisungen müssen in PHP, so wie in vielen anderen Skript- oder Programmiersprachen auch, mit einem
Semikolon ;
abgeschlossen werden.
<?php $meineVariable = 12; meineFunktion(); ?>
Eine Funktion muss zuallererst deklariert werden und kann anschließend an verschiedenen Stellen und bei Bedarf auch mehrmals aufgerufen werden. Die Funktion enthält dabei immer einen bestimmten Programmcode, welcher nur beim Aufruf der Funktion ausgeführt wird. Einige Funktionen werden als sogenannte native Funktionen bezeichnet. Diese Funktionen sind bereits im PHP-Interpreter implementiert und können ohne vorherige Deklaration aufgerufen werden. Wie man eigene Funktionen deklariert, werden Sie im Thema Funktionen lernen. Doch zunächst wollen wir uns anschauen, wie man Funktionen aufruft. Hierfür notieren wir den Namen der Funktion gefolgt von einem runden Klammernpaar. Innerhalb des Klammernpaars können nun sogenannte Parameter (auch als Argumente oder Übergabeparameter bezeichnet) übergeben werden. Dabei kann die Funktion keine, einen oder auch mehrere Parameter haben. Auch optionale Paramter sind möglich. Getrennt werden die einzelnen Parameter mittels des Kommas. Einige Funktionen geben einen Wert zurück. Dieser Wert wird als Rückgabewert bezeichnet. Zur Erinnerung: Der Aufruf einer Funktion ist eine Anweisung, weshalb dieser mit einem Semikolon abgeschlossen werden muss. Den Rückgabewert der Funktion (sofern vorhanden) kann einer Variablen zugewiesen, bei einer Abfrage verwendet oder einer anderen Funktion als Parameter übergeben werden.
<?php meineFunktion(); meineFunktionMitParameter(7, 'ABC'); $rueckgabeWert = meineFunktionMitRueckgabe(); ?>
In PHP gibt es verschiedene und teilweise widersprüchliche Regelungen und Empfehlungen was die Namenskonventionen, also die Namen von Variablen, Funktionen und Klassen, angeht. Die wichtigste Regel dabei ist jedoch immer die Folgende: Wenn man sich für einen Stil entschieden hat, muss dieser im kompletten Projekt (ausgenommen Libraries von Drittanbietern) gleich bleiben. Eine gängige Variante ist die Camel-Case-Schreibweise (mit einem Kleinbuchstaben am Anfang). Diese Konvention gilt bei Variablen und Funktionen. Bei Klassennamen wird ebenfalls die Camel-Case-Schreibweise verwendet, jedoch mit einem Großbuchstaben als erstes Zeichen.
<?php $absenderMail = 'info@example.org'; $empfaengerMail = 'info@example.com'; ?>
Kommentare können auf 3 verschiedene Arten erstellt werden, wovon grundsätzlich zwischen einzeiligen und mehrzeiligen Kommentaren
unterschieden wird. Einen einzeiligen Kommentar können Sie mit zwei Schrägstrichen //
oder einem Hash-Zeichen #
erstellen. Dabei gilt der Kommentar von der angegebenen Position bis zum Ende der Zeile. Ein mehrzeiliger Kommentar beginnt mit der
Zeichensequenz /*
und endet mit */
. Genutzt werden Kommentare zu Dokumentations- und Testzwecken. Anders
wie HTML-, CSS- oder JavaScript-Kommentare werden PHP-Kommentare nicht an den Browser gesendet.
<?php // Dies ist ein einzeiliger Kommentar! # Dies ist auch ein einzeiliger Kommentar! /* Dies ist ein mehrzeiliger Kommentar! */ ?>
Ausgabe
Mit dem Befehl echo
ist es möglich, eine Ausgabe (in das HTML-Dokument) durchzuführen. Dafür wird nach dem Befehl,
gefolgt von einem Leerzeichen, der auszugebende Wert (Konstante, Variable oder Rückgabewert einer Funktion) angegeben. Dies sieht
dann z. B. wie folgt aus:
<?php echo 'Hallo Welt!'; ?>
Der Befehl echo
kann auch wie eine Funktion genutzt werden. Hierbei werden dann wie oben bereits erwähnt Klammern benötigt
und der auszugebende Wert als Parameter übergeben.
<?php echo('Hallo Welt!'); ?>
Der Befehl echo
kann auch mehrere Werte auf einmal ausgeben. Dabei müssen die einzelnen Werte, wie bei anderen Funktionen
auch, mit Komma getrennt werden. Jedoch kann hier nur der Syntax ohne Klammern (also als Befehl) verwendet werden und nicht mit
den runden Klammern, wie bei einer Funktion.
<?php echo 'Hallo ', 'Welt', '!'; ?>
Der Befehl print
ist mit dem echo
Befehl zu vergleichen. Auch bei print
kann eine Notation
ohne Klammern oder mit Klammern (wie bei einer Funktion) erfolgen. Im Unterschied zu echo
ist jedoch nur ein Parameter
möglich. Möchten Sie mehrere Werte auf einmal ausgeben, so müssen Sie echo
verwenden.
<?php print 'Hallo Welt!'; print('Hallo Welt!'); ?>