PHP Grundlagen

Beispiel: Hello-World in PHP

<?php
  header("Content-type: text/html");
?>

<!DOCTYPE html>
<html>
<head>
  <title>Hello World</title>
</head>
<body>
<?php
  echo "<p>Hello World</p>";
?>
</body>
</html>

PHP und HTML mischen

PHP-Datei wird vom PHP-Interpreter ausgeführt

  • ist keine HTML-Datei für den Browser
  • wird vom Web-Server an den PHP-Interpreter übergeben
  • Ausgabe des Interpreters ist normalerweise eine HTML-Seite
  • Text außerhalb von <?php ... ?> wird in die Ausgabe kopiert
    • auch Leerzeichen und Zeilenumbrüche werden in die Ausgabe kopiert

In echten Projekten verwendet man häufig zusätzlich eine Template-Sprache, z. B. Twig

Beispiel: Hello-World in PHP

<?php
  header("Content-type: text/html");
  echo "<!DOCTYPE html>";
  echo "<html>";
  echo "<head>";
  echo "<title>Hello World</title>";
  echo "</head>";
  echo "<body>";
  echo "<p>Hello World</p>";
  echo "</body>";
  echo "</html>";
?>

Beispiel: Hello-World in PHP (heredoc)

<?php
  header("Content-type: text/html");
  $hello = "Hello World";

  echo <<<EOD
  <!DOCTYPE html>
  <html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
  <p>$hello</p>
  </body>
  </html>
EOD;
?>

PHP-Eigenschaften

  • Syntax, Operatoren und Kontrollstrukturen ähnlich zu Java
  • dynamisch typisiert ähnlich JavaScript
    • keine (sichtbaren) Typen
    • keine Variablendeklaration nötig
    • Funktionsdeklaration mit function
    • Typen können für robustere Programme angegeben werden
  • Variablennamen beginnen immer mit $
  • Konstanten können definiert (ohne $)
    const GREETING = "Hallo";
  • umfangreiche Bibliotheken
    • Datenbankzugriffe, Mathematik, Stringverarbeitung
    • Mail, HTML, …

Datentypen

  • PHP typisiert Variablen dynamisch
  • Intern werden jedoch Datentypen verwendet
    • Boolean: bool mit den beiden Konstanten true und false
    • Ganzzahl: int, integer, long
    • Fließkommazahl: float, real, double
    • Zeichenkette: string
    • Arrays: array (indiziert oder assoziativ)
    • Objekt-Datentyp

Typumwandlung

  • Typumwandlung (Type Juggling) erfolgt oft implizit und großzügig
    • hin zum größeren Typ
    • auch von Strings zu Zahlen
  • Zwei Vergleichsoperatoren
    • == Vergleich mit Typumwandlung
    • === Vergleich ohne Typumwandlung
  • Explizite Umwandlung mit Cast-Operator (TYP) oder ...val-Funktionen
Cast Umwandlungsfunktion Beschreibung
(int) intval($var) Umwandlung zu int
(bool) boolval($var) Umwandlung zu bool
(float) floatval($var) Umwandlung zu float
(string) strval($var) Umwandlung zu string
echo (int) "12.33";   // -> 12
echo intval("12.33"); // -> 12
echo (int) "aaaa";    // -> 0
echo (float) "12.33"; // -> 12.33
echo (float) "aaa";   // -> 0.0
echo (string) 12;     // -> "12"
echo (string) 12.33;  // -> "12.33"

Truthiness

PHPs Regeln zur Truthiness sind ähnlich wirr, wie die von JavaScript

Wert Wahrheitswert Wert Wahrheitswert
"" false -1 true
null false "1" true
undefined false "0" false
[] false "-1" true
['a', 'b'] true "php" true
1 true "true" true
42 true "false" true
0 false

Datentyp prüfen

Man kann den Typ einer Variablen prüfen

  • is_bool($var): Boolean
  • is_integer($var): Ganzzahl
  • is_real($var): Fließkomma
  • is_numeric($var): Ganzzahl oder Fließkomma
  • is_string($var): String
  • is_array($var): Array
  • is_object($var): Objekt
  • gettype($var): Liefert den Typ als String

Existenz von Variablen

Zugriff auf nicht initialisierte Variablen ist verboten ⇒ Fehler

  • Mit isset kann man Variable prüfen, es liefert
    • true, wenn diese Variable einen Wert hat
    • false, falls die Variable nicht gesetzt wurde
  • Mit unset kann man eine Variable löschen
    • PHP löscht Variablen automatisch am Ende der Sichtbarkeit
    • Reference-Counting, kein Garbage Collector
echo isset($a); // -> false ()
$a = "Hallo";
echo isset($a); // -> true (1)
unset($a);
echo isset($a); // -> false ()

Kurzform mit ??-Operator

??-Operator erleichtert den Umgang mit Variablen

  • Syntax: $var ?? expr
  • Wenn $var definiert und nicht null ist, wird $var zurückgegeben
  • Andernfalls wird expr ausgewertet und zurückgegeben
Beispiel: ??-Operator
$a = null;
$b = "valid";

echo $a ?? "default"; // -> default
echo $b ?? "default"; // -> valid
echo $c ?? "default"; // -> default
echo $d;              // Error

Konstanten

  • haben kein $ im Namen
  • werden mit const erzeugt
    const name = wert;
  • der Zugriff erfolgt über den Namen, ohne $
  • Wert der Konstanten lässt sich nicht mehr ändern
    • erneute Zuweisung führt zu einer Fehlermeldung
    • können nicht mehr entfernt werden
  • Alte Methode über define() (⇔ #define in C) sollte nicht mehr genutzt werden

Beispiel: Konstanten

Definition von Konstanten: Moderne Syntax
const PI = 3.14159265;

echo PI; // -> 3.14159265

function flaeche($radius) {
    return PI * $radius * $radius;
}

echo flaeche(2); // -> 12.5663706

Beispiel: Konstanten (Old School)

Veraltete Methode für Konstanten: NICHT mehr verwenden
define('PI', 3.14159265);

echo PI; // -> 3.14159265

function flaeche($radius) {
    return PI * $radius * $radius;
}

echo flaeche(2); // -> 12.5663706

Strings

Begrenzer für Strings ist " oder '

  • "...": Variablen und Sonderzeichen werden ausgewertet
    echo ("<td>Anzahl: $anzahl</td>");
  • '...': Variablen und Sonderzeichen werden nicht ausgewertet
  • Strings können Strings mit anderem Begrenzer enthalten
    echo('<img src="portrait.jpg">');
    echo("<img src='portrait.jpg'>");

Sonderzeichen wie in Java

  • Stringverkettung mit .
    $greeting = "Hello " . $name;
  • Zugriff auf einzelne Zeichen (beginnt bei 0)
    $zeichen = $greeting[4];
  • \0 ist keine Endmarke, sondern ein normales Zeichen
  • Typischer Fehler
    • "Hello " + "World" ergibt 0
    • "Hello " . "World" ergibt "Hello World"

PHP und Unicode

PHP-Strings sind nicht Unicode

  • 1 Byte pro Zeichen
  • keine Probleme bei ISO-8859-x Zeichensätzen
  • Probleme bei anderen Zeichensätzen
  • PHP 6 sollte auf Unicode basieren, wurde aber eingestampft

Ausweg: PHP-Extension mbstring

  • muss explizit installiert werden
  • bietet Ersatz für die Standard-Stringfunktionen von PHP
  • Präfix mb_ für alle Funktionen

bin2hex() Converts a string of ASCII characters to hexadecimal values

hex2bin() Converts a string of hexadecimal values to ASCII characters

crc32() Calculates a 32-bit CRC for a string

md5() Calculates the MD5 hash of a string

sha1() Calculates the SHA-1 hash of a string

crypt() One-way string hashing

strsplit() Splits a string into an array

explode() Breaks a string into an array

implode() Returns a string from the elements of an array

join() Alias of implode()

html_entity_decode() Converts HTML entities to characters

htmlentities() Converts characters to HTML entities

htmlspecialchars_decode() Converts some predefined HTML entities to characters

htmlspecialchars() Converts some predefined characters to HTML entities

strtok() Splits a string into smaller strings

chop() Removes whitespace or other characters from the right end of a string

trim() Removes whitespace or other characters from both sides of a string

ltrim() Removes whitespace or other characters from the left side of a string

rtrim() Removes whitespace or other characters from the right side of a string

ord() Returns the ASCII value of the first character of a string

chr() Returns a character from a specified ASCII value

strrot13() Performs the ROT13 encoding on a string

quoted_printable_decode() Converts a quoted-printable string to an 8-bit string

quoted_printable_encode() Converts an 8-bit string to a quoted printable string

quotemeta() Quotes meta characters

sscanf() Parses input from a string according to a format

str_getcsv() Parses a CSV string into an array

str_ireplace() Replaces some characters in a string (case-insensitive)

strpad() Pads a string to a new length

str_repeat() Repeats a string a specified number of times

str_replace() Replaces some characters in a string (case-sensitive)

str_shuffle() Randomly shuffles all characters in a string

str_wordcount() Count the number of words in a string

strcasecmp() Compares two strings (case-insensitive)

strchr() Finds the first occurrence of a string inside another string (alias of strstr())

strcmp() Compares two strings (case-sensitive)

strip_tags() Strips HTML and PHP tags from a string

strstr() Finds the first occurrence of a string inside another string (case-sensitive)

strpos() Returns the position of the first occurrence of a string inside another string (case-sensitive)

strrchr() Finds the last occurrence of a string inside another string

strlen() Returns the length of a string

strrev() Reverses a string

strtolower() Converts a string to lowercase letters

strtoupper() Converts a string to uppercase letters

strtr() Translates certain characters in a string

substr() Returns a part of a string

Erzeugung von Ausgaben

Befehl Beschreibung
echo str1 [, str2 ...] Ausgabe von Strings
print(string) Ausgabe eines Strings
print_r(objekt) Gibt Objekt rekursiv aus (debugging)
printf(format [, args]) formatierte Ausgabe
(entspricht C printf und Java System.out.printf)
<?= $var ?> Ausgabe einer Variable oder eines Ausdrucks
(entspricht <?php print($var); ?>)
flush() leert den Ausgabepuffer

Beispiel: Ausgaben

<?php
$name = "Thomas";
echo "<b>", "Hallo ", $name, "</b>" , "<br/>";
print("<b>" . "Hallo " . $name . "</b>" . "<br/>");
printf("<b>Hallo %s</b><br/>", $name);
?>
<b>Hallo <?= $name ?> </b><br/>
Hallo Thomas
Hallo Thomas
Hallo Thomas
Hallo Thomas

Funktionen

  • Eigene Funktionen werden mit function definiert
    function greet1($vorname, $nachname) { ... }
  • Optionale Parameter sind am Ende der Parameterliste möglich
    function greet2($name, $greeting = "Hallo") { ... }
  • PHP unterstützt Call-by-Value (default) und Call-by-Reference
    function promotion(&$nombre) { ... }

Beispiel: Funktionen

function greet1($vorname, $nachname) {
    echo "Hello $vorname $nachname";
    return true; // Rckgabewert
}

greet1("Thomas", "Smits"); // -> Hello Thomas Smits

function greet2($name, $greeting = "Hallo") {
    echo $greeting, " ", $name;
}

greet2("Thomas", "Gruezi"); // -> Gruezi Thomas
greet2("Thomas");           // -> Hallo Thomas
Funktion mit Referenz-Parameter
function promotion(&$nombre) {
    $nombre = "Dr. " . $nombre;
}

$name = "Meier";
promotion($name);
echo $name; // -> Dr. Meier

Anonyme Funktionen

  • Definition über function: $f = function ($x) { $x * $x };
  • Definition über fn und =>: $f = fn ($x) => $x * $x;
  • Aufruf über Variable und (): $f(5);

Closure

  • Eine anonyme Funktion nimmt ihre Umgebung (Variablen) bei der Deklaration mit
  • Variablen leben so lange, wie die Funktion lebt
  • bei fn und => passiert dies automatisch
  • bei function müssen die Variablen mit use deklariert werden
  • die Variable wird zum Zeitpunkt der Funktionserzeugung „gecaptured“

Beispiel: Closure

$extern = 23;

$adder1 = function ($x) use ($extern) { return $x + $extern; };
$adder2 = fn ($x) => $x + $extern;

echo $adder1(19); // -> 42
echo $adder2(19); // -> 42

$extern = 33;

echo $adder1(19); // -> 42
echo $adder2(19); // -> 42

Globale Variable in Funktionen

  • Globale Variablen sind nicht automatisch in Funktionen sichtbar
  • Müssen mit Schlüsselwort global bekannt gemacht werden
function tuwas() {
    echo $a;
}

$a = "Hallo";
tuwas(); // -> keine Ausgabe

function tuwas() {
    global $a;
    echo $a;
}

$a = "Hallo";
tuwas(); // -> Hallo

Wiederverwendung

Klassen oder Funktionen können eingebunden werden

  • require_once "php-datei"; oder include_once "php-datei";
    • vergleichbar mit #include in C++
    • bedingte Einbindung über if-Anweisungen möglich
    • Dateiname kann zur Laufzeit berechnet werden
    • jede Datei wird nur einmal inkludiert
  • fehlende Datei bewirkt
    • Abbruch bei require_once
    • Warnung bei include_once
  • Variablen sind (leider) übergreifend sichtbar

Beenden des PHP-Skripts

Skripte können an beliebiger Stelle beendet werden

  • exit; - Beendet Skript
  • exit(); - Beendet Skript
  • exit($code); - Beendet Skript mit Fehlercode
  • exit($string); - Beendet Skript und gibt Fehlerstring aus
  • die - Ist ein Synonym für exit

Copyright © 2025 Thomas Smits