Stand: 03.09.2018

Links zu PHP:

10.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.

Frontend und Backend

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:

Backend-Programmierung

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 (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, ist sind die am meisten verbreitete serverseitige Programmiersprache.

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.

Beispiele für PHP-Systeme:

10.2 Technische Einrichtung

10.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.

10.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:

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. Wechseln Sie dort auf den Reiter "Manage Servers":

XAMPP

Sie sehen drei 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.

XAMPP

Die Oberfläche lassen Sie einfach laufen.

Im Browser

Jetzt können Sie in einem Browser (z.B. Firefox) über die URL "localhost" auf Ihren eigenen Apache-Server zugreifen, den Sie über XAMPP gestartet haben.

XAMPP

Eigene Dateien

Finden Sie das Verzeichnis /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 TCP/IP-Anfrage (also "übers Internet") angefordert wird (ein sog. Request) und dann der Server auf diese Anfrage antwortet (sog. Response), indem er die Datei zurückschickt.

Interessant wird es, wenn zwischen diesen beiden Schritten die HTML-Datei noch angepasst wird, indem PHP-Code ausgeführt und Datenbank-Inhalte abgerufen und eingebaut werden.

10.3 Erste Schritte

Erstellen Sie jetzt eine Datei mit der Endung .php z.B. test.php und stellen Sie sie ins /htdocs Verzeichnis.

10.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.

10.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.

Rufen Sie die Datei im Browser über localhost/test.php auf. In der folgenden Datei wird zunächst der PHP-Teil ausgewertet und durch das Resultat ersetzt. Erst dann wird die Datei an den Browser weitergegeben.

<!DOCTYPE html>
<html>
<body>
  <?php
    echo 'hello world';
  ?>
</body>
</html>

Wenn Sie die Datei im Browser öffnen und sich den Quelltext anschauen, sehen Sie:

<!DOCTYPE html>
<html>
<body>
  hello world
</body>
</html>

Sie sehen, dass der Client gar nicht sieht, woher das "hello world" ursprünglich kam (also 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. kopiert werden könnte oder sensible Infos (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>

PHP an verschiedenen Stellen

PHP kann an beliebigen Stellen im HTML vorkommen. Hier sehen Sie PHP z.B. bei den CSS-Stilangaben:

<!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>';
?>

10.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 einen Befehl, um diesen Code in die aktuelle Datei einzubinden.

Befinden wir uns also in einer anderen 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.

10.4 Daten

10.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:

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 --.

10.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.

10.4.3 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

10.4.4 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 Variable $GLOBALS enthält alle globalen Variablen. Haben Sie z.B. die globale Variable $foo, so können Sie sie mit

$GLOBALS['foo'] = 42;

neu setzen.

Weitere superglobale Variablen liefern von Systemseite Informationen über den Web-Kontext:

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.

10.4.5 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 eher einer Hashtabelle in Java (z.B. die Klasse HashMap). Dort verwenden Sie 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

Sie haben sich sicher schon so sehr an Arrays gewöhnt, dass völlig klar ist, dass man Zahlen verwendet, um auf die Elemente zuzugreifen. Das muss aber nicht sein. Man könnte auch Strings benutzen, um die einzelnen Elemente zu kennzeichnen.

Man stelle sich ein Telefonbuch vor, wo Telefonnummern gespeichert werden. Der Zugriff auf eine Nummer soll hier über den Namen laufen. Das kann man mit einem assoziativen Array erreichen.

$tel = array("Heinz Schmidt" => "4561", "Laura Kaiser" => "3355", "Donna Leon" => "4321");

Man nennt die eigentliche Information im Array auch Wert (hier die Nummer) und den Zugriffs-String den Schlüssel (hier der Name).

Der Zugriff auf ein Einzelelement erfolgt über den Schlüssel:

echo 'Lauras Nummer ist: ' . $tel['Laura Kaiser'];

Man kann auch hier eine Foreach-Schleife verwenden. Hier definiert man zwei Laufvariablen für jeweils Schlüssel und Wert.

foreach ($tel as $name => $nummer) {
  echo $name . ' hat Nummer ' . $nummer . ' ';
}

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';
?>

10.5 Kontrollfluss

10.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]

10.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 . ' ';
}

10.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;
}

?>