PHP Tutorial mit ausführbaren Beispielen
Ein kostenloses PHP 8 Tutorial und Nachschlagewerk: Arrays, foreach, String-Funktionen, Datum, Formulare, Klassen und Fehler. Jedes Beispiel läuft auf der Seite, und Beispiele, die HTML ausgeben, zeigen die Seite mit Formularen, die du absenden kannst.
Geführten PHP-Lernweg startenErste Schritte
- Was ist PHP?PHP ist eine serverseitige Skriptsprache: Eine PHP-Datei läuft auf dem Webserver und schickt das HTML, das sie erzeugt, an den Browser. PHP steckt hinter WordPress, Laravel und einem großen Teil des Webs und führt auch Skripte auf der Kommandozeile aus.
- PHP installierenPHP mit einem Befehl installieren: winget unter Windows, Homebrew unter macOS, apt oder dnf unter Linux. Danach mit php -v im Terminal prüfen, ob es funktioniert und welche Version du hast.
- PHP ausführenEine PHP-Datei im Terminal mit php index.php ausführen oder einen Ordner mit dem eingebauten Server von PHP im Browser bereitstellen: php -S localhost:8000. Für beides brauchst du weder Apache noch XAMPP.
- echo und printecho gibt einen oder mehrere Strings aus: echo "Hello, $name"; oder echo $a, $b;. So schickt man üblicherweise Text oder HTML an die Seite. print macht dasselbe mit einem Wert und gibt 1 zurück; <?= $x ?> ist die Kurzform in HTML.
- FehlerausgabeUm alle PHP-Fehler anzuzeigen, schreib ini_set('display_errors', '1'); und error_reporting(E_ALL); an den Anfang des Skripts oder setze display_errors = On und error_reporting = E_ALL in der php.ini. In Produktion Fehler protokollieren statt anzeigen.
- PHP vs PythonPHP ist für das Web gebaut: Pro Anfrage läuft eine Datei und gibt eine Seite aus, und PHP steckt hinter WordPress und Laravel. Python ist eine Allzwecksprache, die auch Webarbeit erledigt (Django, Flask) und Data Science, Automatisierung und Machine Learning dominiert.
- PHP vs JavaScriptPHP läuft auf dem Server und schickt fertiges HTML an den Browser. JavaScript läuft im Browser, wo es die Seite nach dem Laden verändert, und mit Node.js auf dem Server. Die meisten Websites nutzen beides: PHP für Seiten und APIs, JavaScript für Interaktion.
Grundlagen
- VariablenEine PHP-Variable beginnt mit $ und entsteht durch eine Zuweisung: $name = "Ada";. Es gibt kein Schlüsselwort zur Deklaration und keinen festen Typ. Funktionen sehen äußere Variablen nur, wenn du sie übergibst, global nutzt oder sie einfängst; static behält einen Wert zwischen Aufrufen.
- DatentypenPHP hat zehn Typen: vier skalare (int, float, string, bool), vier zusammengesetzte (array, object, callable, iterable) und zwei besondere (null, resource). var_dump($x) zeigt Typ und Wert eines Werts, gettype($x) liefert den Namen des Typs.
- StringsPHP-Strings verbindest du mit dem Punktoperator ("Hello, " . $name) oder setzt Variablen direkt in doppelte Anführungszeichen ("Hello, $name"). Einfache Anführungszeichen geben Text wörtlich aus. Hier: Verkettung, .=, Interpolation von Arrays und Objekten und Groß-/Kleinschreibung mit strtoupper, strtolower, ucfirst und ucwords.
- Heredoc und NowdocEin PHP-Heredoc ist ein mehrzeiliger String, der mit <<<EOT beginnt und mit EOT endet; er ersetzt Variablen wie ein String in doppelten Anführungszeichen. Ein Nowdoc, <<<'EOT', behält den Text genau so, wie er geschrieben ist. Hier: Syntax, Einrückungsregeln, Interpolation von Arrays und Objekten und HTML-Templates.
- OperatorenPHP-Operatoren arbeiten mit Werten: +, -, *, /, %, ** zum Rechnen, =, +=, .=, ??= für Zuweisungen, &&, ||, ! und xor für Logik, . zum Verbinden von Strings, ==, ===, <=> zum Vergleichen und ++, -- zum Hochzählen. Jede Gruppe mit ausführbaren Beispielen, dazu die Rangfolge-Falle and vs &&.
- VergleichsoperatorenPHP vergleicht Werte mit == (gleich nach Typumwandlung), === (gleicher Wert und gleicher Typ), != und !==, < > <= >= und dem Spaceship-Operator <=>. Wann == Typen umwandelt, was sich in PHP 8 geändert hat und jeder lockere und strikte Vergleich in einer Tabelle.
- Ternärer OperatorDer ternäre Operator in PHP ist ein if/else in einer Zeile: $result = $condition ? 'yes' : 'no';. Hier: der kurze Ternär-Operator ?: (Elvis-Operator), der Unterschied zu ??, warum verschachtelte Ternäre seit PHP 8 Klammern brauchen und wann match die sauberere Wahl ist.
- Null Coalescing ??Der Null-Coalescing-Operator in PHP liefert seine linke Seite, außer sie ist null oder nicht gesetzt: $name = $_GET['name'] ?? 'Guest';. Er warnt nie vor einer fehlenden Variable oder einem fehlenden Array-Schlüssel. Hier: Ketten mit ??, die Zuweisung ??=, ?? vs ?: und der Nullsafe-Operator ?->.
- Type CastingEinen PHP-String wandelst du mit (int) $str oder intval($str) in eine Ganzzahl um; (int) "42" ist 42 und (int) "12abc" ist 12. Hier: Casts nach int, float, bool, string und array, numerische Strings, intval mit Basis, settype und wie du Eingaben prüfst, statt still 0 zu bekommen.
- KonstantenEine PHP-Konstante ist ein Name für einen Wert, der sich nicht ändern kann: const MAX_USERS = 100; oder define('MAX_USERS', 100);. Hier: define vs const, konstante Arrays, Klassenkonstanten mit self::, Prüfen mit defined() und die magischen Konstanten __LINE__, __FILE__, __DIR__ und __CLASS__.
- isset()isset($var) liefert true, wenn eine Variable existiert und nicht null ist, sonst false, und das ohne Warnung. Es prüft auch Array-Schlüssel und Objekteigenschaften: isset($user['email']). Hier: isset mit mehreren Variablen, verschachtelte Schlüssel, isset vs empty, isset vs array_key_exists und Formulare prüfen.
- empty()empty($var) liefert true, wenn eine Variable fehlt oder falsy ist: null, false, 0, 0.0, "", "0" oder []. Es warnt nie bei undefinierten Variablen oder Schlüsseln. Hier: warum "0" als leer zählt, wie du genau auf einen leeren String oder ein leeres Array prüfst, empty vs isset und Formulareingaben prüfen.
- Mathe und Rundenround($x, 2) rundet auf zwei Nachkommastellen, floor() rundet immer ab und ceil() rundet immer auf. Dazu intdiv(), der Operator %, ** für Potenzen, abs(), max(), min() und random_int() für Zufallszahlen.
Kontrollstrukturen
- if, elseif, elseif (condition) { ... } führt einen Block nur aus, wenn die Bedingung wahr ist, elseif prüft die nächste Bedingung, und else läuft, wenn keine gepasst hat. Mit elseif vs else if, && und ||, truthy Werten und der Syntax if: endif; für HTML-Templates.
- switch-Anweisungswitch ($value) vergleicht einen Wert mit einer Liste von case-Labels und führt den Code ab dem ersten Treffer bis zu einem break aus. Mit mehreren Cases, Fallthrough, default, switch(true) und warum switch mit dem lockeren Vergleich == arbeitet.
- match-Ausdruckmatch ($x) { 1, 2 => 'low', default => 'other' } vergleicht einen Wert strikt mit ===, liefert das Ergebnis des ersten passenden Zweigs und wirft einen UnhandledMatchError, wenn nichts passt. Mit match vs switch, match(true) und match mit Enums.
- for-Schleifefor ($i = 0; $i < 10; $i++) { ... } führt einen Block eine feste Anzahl von Malen aus: Startwert, eine Bedingung, die vor jedem Durchlauf geprüft wird, und ein Schritt. Mit Arrays über den Index durchlaufen, Herunterzählen, verschachtelten Schleifen, break und continue.
- while-Schleifewhile (condition) { ... } wiederholt einen Block, solange die Bedingung wahr ist, und prüft sie vor jedem Durchlauf. do { ... } while (condition); prüft danach und läuft deshalb immer mindestens einmal. Mit while (true) und break, Dateien Zeile für Zeile lesen und Endlosschleifen vermeiden.
- foreach-Schleifeforeach ($array as $value) besucht jedes Element eines Arrays, und foreach ($array as $key => $value) liefert zusätzlich den Schlüssel. Mit Index ermitteln, Werte per Referenz ändern und der Falle mit unset(), break und continue, verschachtelten Arrays, list() in foreach und HTML bauen.
Arrays
- ArraysEin PHP-Array ist eine geordnete Liste von Werten, jeder unter einem Schlüssel gespeichert: $fruits = ['apple', 'banana']; liest du als $fruits[0]. Hier: Arrays erstellen, Elemente lesen und ändern, darüber iterieren, sie ausgeben und welche Array-Funktion wofür.
- Assoziative ArraysEin assoziatives Array in PHP speichert Werte unter Schlüsseln, die du benennst: $user = ['name' => 'Ada', 'age' => 36]; liest du als $user['name']. Hier: Paare hinzufügen, ändern und entfernen, über Schlüssel und Werte iterieren, alle Schlüssel oder Werte holen, einen Schlüssel prüfen und nach Schlüssel oder Wert sortieren.
- Mehrdimensionale ArraysEin mehrdimensionales Array in PHP ist ein Array, dessen Elemente Arrays sind, gelesen mit einer Klammer pro Ebene: $grid[1][2] oder $users[0]['name']. Hier: verschachtelte Arrays erstellen, tiefe Werte lesen und ändern, mit verschachteltem foreach iterieren, eine HTML-Tabelle bauen, eine Spalte herausziehen und Zeilen sortieren.
- array_push()array_push($arr, $value) fügt einen oder mehrere Werte am Ende eines Arrays hinzu; $arr[] = $value macht dasselbe für einen Wert und ist schneller. Hier: am Ende, am Anfang oder in der Mitte eines Arrays einfügen, einen Schlüssel mit Wert hinzufügen und den klassischen Bug mit dem Rückgabewert vermeiden.
- count()count($arr) liefert die Anzahl der Elemente eines PHP-Arrays, also ist count(['a', 'b', 'c']) gleich 3. Hier: verschachtelte Arrays mit COUNT_RECURSIVE zählen, wie sizeof() zu count() steht, passende Werte zählen und warum count(null) seit PHP 8 einen TypeError wirft.
- in_array()in_array($needle, $haystack) liefert true, wenn der Wert im Array ist. Übergib true als drittes Argument für eine strikte Prüfung, in_array('1', $ids, true), damit auch die Typen übereinstimmen müssen. Hier: das Strict-Flag, Suche ohne Groß- und Kleinschreibung, mehrere Werte prüfen, verschachtelte Arrays und die schnelle Alternative mit isset.
- array_search()array_search($value, $array) liefert den Schlüssel des ersten Elements, das gleich $value ist, oder false, wenn es keines gibt. Weil der Schlüssel 0 sein kann, prüfst du das Ergebnis immer mit !== false. Hier: strikte Suche, alle Treffer finden, ein mehrdimensionales Array mit array_column durchsuchen und Suche ohne Groß- und Kleinschreibung.
- array_key_exists()array_key_exists('key', $array) liefert true, wenn das Array diesen Schlüssel hat, selbst wenn sein Wert null ist. isset($array['key']) ist schneller, liefert bei einem null-Wert aber false. Hier: der Unterschied, key_exists(), verschachtelte Schlüssel, mehrere Schlüssel prüfen und warum Objekte property_exists() brauchen.
- array_merge()array_merge($a, $b) fügt Arrays zu einem zusammen: Werte mit numerischen Schlüsseln werden angehängt und neu nummeriert, und bei String-Schlüsseln gewinnt das spätere Array. Hier: wie sich array_merge vom Operator + und der Spread-Syntax [...$a, ...$b] unterscheidet, wie du eine Liste von Arrays zusammenführst und wann array_merge_recursive oder array_replace besser passt.
- array_map()array_map($callback, $array) ruft den Callback für jedes Element auf und liefert ein neues Array mit den Ergebnissen. Hier: Arrow Functions, Schlüssel, mehrere Arrays auf einmal mappen und wann array_walk oder foreach besser passt.
- array_filter()array_filter($array, $callback) behält die Elemente, für die der Callback true liefert. Hier: leere Werte entfernen, mit ARRAY_FILTER_USE_KEY nach Schlüssel filtern, das Ergebnis mit array_values neu indizieren und mit array_reduce aufsummieren.
- Arrays sortierensort($array) sortiert eine Liste direkt, asort und ksort sortieren ein assoziatives Array nach Wert oder nach Schlüssel, und usort sortiert mit deinem eigenen Vergleich. Hier: alle davon, ein mehrdimensionales Array nach einer Spalte sortieren und den klassischen Fehler $sorted = sort($arr) vermeiden.
- Aus Array entfernenunset($array[$key]) entfernt ein Element über den Schlüssel, array_splice entfernt über die Position und nummeriert neu, und array_diff entfernt über den Wert. Hier: jede davon, wie du danach neu indizierst und die Falle mit array_search, die das falsche Element löscht.
- array_slice()array_slice($array, $offset, $length) liefert eine Kopie eines Teils eines Arrays, ohne das Original zu ändern. Hier: negative Offsets für die letzten Einträge, preserve_keys, durch eine Liste blättern und der Unterschied zu array_splice.
- array_unique()array_unique($array) entfernt doppelte Werte und behält jeweils das erste Vorkommen mit seinem ursprünglichen Schlüssel. Hier: das Ergebnis neu indizieren, Duplikate ohne Groß- und Kleinschreibung entfernen, ein mehrdimensionales Array eindeutig machen und Duplikate zählen oder finden.
- array_column()array_column($rows, 'email') liefert das Feld email jeder Zeile als flaches Array. Hier: das Argument für den Index-Schlüssel, Zeilen nach ID neu indizieren, Verwendung mit Objekten und eine Zeile mit array_search finden.
- Destructuring und list()[$a, $b] = $array weist die ersten zwei Elemente in einer Zeile $a und $b zu, und ['name' => $name] = $user macht dasselbe über den Schlüssel. list() ist die ältere Schreibweise. Mit Elemente überspringen, Variablen tauschen, mehreren Rückgabewerten, Destructuring in foreach und dem Spread-Operator ...
Strings
- explode()explode(',', $string) teilt einen String an jedem Komma und liefert die Teile als Array. Hier: der Parameter limit, nach Zeilenumbruch aufteilen, die Teile trimmen und wann str_split oder preg_split das bessere Werkzeug ist.
- implode()implode(', ', $array) verbindet die Werte eines Arrays zu einem String, mit einem Trennzeichen dazwischen. Hier: implode mit Schlüsseln, assoziative Arrays, HTML-Listen bauen und der Unterschied zwischen implode und join.
- str_replace()str_replace($search, $replace, $subject) ersetzt jedes Vorkommen von $search durch $replace. Hier: Arrays von Such- und Ersatzwerten, Ersetzungen zählen, str_ireplace ohne Groß- und Kleinschreibung und nur das erste Vorkommen ersetzen.
- substr()substr($string, $offset, $length) liefert einen Teil eines Strings. Hier: negative Offsets, die ersten oder letzten Zeichen holen, mb_substr für Japanisch und anderen UTF-8-Text, substr_count und Text mit Auslassungspunkten kürzen.
- strpos()strpos($haystack, $needle) liefert die Position des ersten Vorkommens von $needle oder false, wenn es nicht gefunden wird. Hier: die Prüfung !== false, stripos ohne Groß- und Kleinschreibung, der letzte Treffer mit strrpos und jedes Vorkommen finden.
- str_contains()str_contains($haystack, $needle) liefert true, wenn $needle irgendwo in $haystack vorkommt. Hier: die Version ohne Groß- und Kleinschreibung, str_starts_with und str_ends_with, auf mehrere Wörter prüfen und die Version mit strpos für PHP 7.
- trim()trim($string) entfernt Leerzeichen, Tabs und Zeilenumbrüche an beiden Enden eines Strings; ltrim() und rtrim() bereinigen eine Seite. Hier: bestimmte Zeichen trimmen, das vollbreite japanische Leerzeichen und jeden Wert eines Arrays trimmen.
- strlen()strlen($string) liefert die Länge eines Strings in Bytes; mb_strlen($string) liefert sie in Zeichen. Hier: warum japanischer Text und Emoji unterschiedliche Antworten liefern, wie du auf einen leeren String prüfst und wie du die Länge von Eingaben validierst.
- sprintf()sprintf() baut einen String aus einem Format und Werten: sprintf('%05.2f', 3.14159) liefert "03.14". Hier: %s, %d und %f, Auffüllen mit Nullen, feste Nachkommastellen, Ausrichtung, nummerierte Argumente, printf und vsprintf.
- number_format()number_format(1234567.891, 2) liefert "1,234,567.89": Es rundet auf die angegebenen Nachkommastellen und fügt ein Tausendertrennzeichen ein. Hier: die vier Parameter, europäische und japanische Formate, wie es rundet und warum das Ergebnis ein String ist.
- ZeilenumbrücheUm in PHP eine neue Zeile auszugeben, schreibst du "\n" in doppelte Anführungszeichen oder verwendest PHP_EOL. Auf einer Webseite ist ein Zeilenumbruch nicht sichtbar, also verwendest du <br> oder nl2br(). Hier: der Unterschied, warum '\n' in einfachen Anführungszeichen nicht funktioniert und wie du Zeilenumbrüche aufteilst oder entfernst.
- preg_match()preg_match($pattern, $subject, $matches) prüft einen String gegen einen regulären Ausdruck und liefert 1 bei einem Treffer, 0 bei keinem. Hier: Capture Groups, benannte Gruppen, preg_match_all, Anker, Muster zur Validierung und der Modifikator u für UTF-8 und japanischen Text.
- preg_replace()preg_replace($pattern, $replacement, $subject) ersetzt jeden Treffer eines regulären Ausdrucks: preg_replace('/\s+/', ' ', $text) fasst Leerraum zusammen. Hier: Rückverweise wie $1, preg_replace_callback, nicht alphanumerische Zeichen entfernen, Limits und Zählungen.
Funktionen
- FunktionenEine PHP-Funktion definierst du mit function name($param) { return $value; }. Hier: Rückgabewerte, Standardparameter, benannte Argumente, Übergabe per Referenz, Typdeklarationen mit strict_types, nullable und Union Types und variadische ...$args.
- Arrow FunctionsEine Arrow Function ist eine anonyme Funktion aus einem Ausdruck, geschrieben als fn($x) => $x * 2. Sie verwendet äußere Variablen automatisch, als Wert, ohne use. Hier: die Syntax, wie das Einfangen funktioniert, Typen, Callbacks für array_map und usort und wann stattdessen eine vollständige Closure passt.
- Anonyme FunktionenEine anonyme Funktion (Closure) ist eine Funktion ohne Namen, die in einer Variable gespeichert wird: $greet = function ($name) { return "Hi $name"; };. Hier: das Schlüsselwort use, Einfangen per Referenz, Callables, die First-Class-Callable-Syntax strlen(...) und Closures in Klassen.
- GeneratorenEin Generator ist eine Funktion, die mit yield Werte einzeln zurückgibt, sodass foreach über eine Million Einträge laufen kann, ohne ein Array aufzubauen. Hier: yield, Schlüssel, Speicherersparnis, unendliche Folgen, yield from, send() und getReturn().
Klassen und Objekte
- Klassen und ObjekteEine PHP-Klasse ist ein Bauplan, deklariert mit `class Name { }`, und `new Name()` erzeugt daraus ein Objekt. Hier: Eigenschaften, Methoden, `$this`, public/private/protected, typisierte und readonly-Eigenschaften, `__toString` und warum eine Zuweisung ein Objekt nicht kopiert.
- KonstruktorenEin PHP-Konstruktor ist die Methode `__construct()`, die automatisch läuft, wenn du `new ClassName(...)` schreibst. Hier: Constructor Property Promotion, Standard- und benannte Argumente, Validierung, `parent::__construct()` und wie du mehrere Konstruktoren mit statischen Factory-Methoden nachbildest.
- VererbungIn PHP erbt eine Klasse mit `class Dog extends Animal` von einer anderen: Sie bekommt die öffentlichen und geschützten Eigenschaften und Methoden der Elternklasse, kann sie überschreiben und das Original trotzdem mit `parent::method()` aufrufen. Hier: Überschreiben, protected, final, instanceof und die Falle mit privaten Methoden.
- InterfacesEin PHP-Interface listet Methoden auf, die eine Klasse zu haben verspricht: `interface Shape { public function area(): float; }`, und `class Circle implements Shape` muss dann `area()` definieren. Hier: Typangaben mit Interfaces, mehrere Interfaces implementieren, Interface-Konstanten, Interfaces erweitern, eingebaute Interfaces wie Countable und Interface vs abstrakte Klasse.
- Abstrakte KlassenEine abstrakte PHP-Klasse wird mit `abstract class Name` deklariert und lässt sich nicht instanziieren: Sie existiert, um erweitert zu werden. Sie kann Eigenschaften, einen Konstruktor und fertige Methoden enthalten, dazu `abstract`-Methoden ohne Rumpf, die jede Kindklasse implementieren muss.
- TraitsEin PHP-Trait ist ein wiederverwendbarer Block aus Methoden und Eigenschaften, den du mit `use TraitName;` in eine Klasse kopierst. Hier: mehrere Traits verwenden, Namenskonflikte mit `insteadof` und `as` lösen, abstrakte und statische Trait-Member, welche Methode gewinnt und Trait vs Interface vs abstrakte Klasse.
- EnumsEin PHP-Enum (8.1+) ist ein Typ mit einer festen Liste von Werten: `enum Status: string { case Active = 'active'; }`. Hier: Pure und Backed Enums, `->value` und `->name`, Umwandeln mit `from()` und `tryFrom()`, Cases auflisten mit `cases()`, Methoden, Konstanten, Interfaces und Enums in `match`.
- Statische MethodenEine `static`-Methode oder -Eigenschaft gehört zur Klasse, nicht zu einem Objekt: Du rufst sie mit `ClassName::method()` auf und liest sie mit `ClassName::$count`, ganz ohne `new`. Hier: `self::` vs `static::` (Late Static Binding), `new static`, statische Variablen in Funktionen und wann static das falsche Werkzeug ist.
- NamespacesEin PHP-Namespace gruppiert Klassen, Funktionen und Konstanten unter einem Präfix: `namespace App\Models;` am Anfang einer Datei und dann `use App\Models\User;` an anderer Stelle, um die Klasse mit ihrem kurzen Namen anzusprechen. Hier: vollqualifizierte Namen, Aliase mit `use ... as`, `use function`, der führende Backslash für globale Klassen und Autoloading nach PSR-4.
Fehler und Ausnahmen
- try catchIn PHP kommt Code, der scheitern könnte, in einen Block `try { }`, und `catch (Exception $e) { }` läuft, wenn er wirft, mit dem Grund in `$e->getMessage()`. Hier: mehrere Exception-Typen abfangen, `finally`, warum `catch (Exception)` `TypeError` und `DivisionByZeroError` verpasst (fang `Throwable` ab), erneut werfen und ein globaler Handler.
- ExceptionsEine Exception wirfst du in PHP mit `throw new Exception('message');`, und der Aufrufer liest sie in einem `catch`-Block mit `$e->getMessage()`. Hier: die eingebauten Exception-Klassen, eigene Exceptions schreiben, `getCode()`, `getLine()` und `getPrevious()`, `throw` als Ausdruck und die Fehler, die PHP selbst wirft, wie `ValueError` und `TypeError`.
Daten, Dateien und das Web
- json_encode()json_encode($value) macht aus einem PHP-Array, -Objekt oder skalaren Wert einen JSON-String. Assoziative Arrays werden zu JSON-Objekten, Listen zu JSON-Arrays, und Flags wie JSON_PRETTY_PRINT und JSON_UNESCAPED_UNICODE steuern die Ausgabe.
- json_decode()json_decode($json, true) macht aus einem JSON-String ein assoziatives PHP-Array; ohne true bekommst du stdClass-Objekte. Hier: verschachtelte Werte, Fehlerbehandlung mit JSON_THROW_ON_ERROR, json_validate() und warum json_decode null liefert.
- date()date('Y-m-d') liefert das heutige Datum als String, und date('Y-m-d', $timestamp) formatiert jeden Unix-Timestamp. Hier: time(), mktime(), strtotime(), DateTimeImmutable, Tage addieren, der Abstand zwischen zwei Daten und Zeitzonen, mit Beispielen zum Ausführen.
- DatumsformatEin PHP-Datumsformat ist ein String aus Buchstaben wie 'Y-m-d H:i:s', wobei Y das vierstellige Jahr ist, m der Monat, d der Tag, H die Stunde, i die Minuten und s die Sekunden. Hier steht jedes Formatzeichen mit Beispiel, dazu Escapen, ISO 8601, japanische Datumsangaben und das Umwandeln von einem Format in ein anderes.
- file_get_contents()file_get_contents('notes.txt') liest eine ganze Datei und liefert sie als einen String, oder false, wenn das nicht geht. Ihr Gegenstück file_put_contents() schreibt einen String in eine Datei, und file() liefert die Zeilen als Array.
- fopen()fopen('data.txt', 'r') öffnet eine Datei und liefert ein Handle oder bei einem Fehler false. Vom Handle liest du mit fgets() oder fread(), schreibst mit fwrite() und schließt mit fclose(). Der Modus ('r', 'w', 'a', 'x', 'c' und ihre Formen mit +) bestimmt, was du tun kannst.
- include und requireinclude 'header.php'; führt an dieser Stelle eine andere PHP-Datei aus, als wäre ihr Code dort eingefügt. require macht dasselbe, stoppt das Skript aber mit einem fatalen Fehler, wenn die Datei fehlt, während include nur warnt und weitermacht. include_once und require_once laden eine Datei nur beim ersten Mal.
- FormulareEin PHP-Formular sendet mit <form method="post"> an sich selbst, und das Skript liest die Felder aus $_POST['name'], sobald $_SERVER['REQUEST_METHOD'] gleich 'POST' ist. Hier: Validierung, Fehlermeldungen neben den Feldern, eingegebene Werte behalten, Checkboxen und Selects und das Escapen der Ausgabe.
- $_GET und $_POST$_GET enthält den Query-String der URL (?page=2 ergibt $_GET['page']), und $_POST enthält die Felder eines Formulars, das mit method="post" gesendet wurde. Hier: beide sicher lesen, Links mit http_build_query bauen, $_SERVER['REQUEST_METHOD'] prüfen und zwischen GET und POST wählen.
- htmlspecialchars()htmlspecialchars($text) wandelt die fünf Zeichen, die in HTML etwas bedeuten (& < > " '), in Entities um, sodass Nutzereingaben als Text angezeigt werden, statt als Markup zu laufen. Hier: ENT_QUOTES, Attribute escapen, doppeltes Kodieren, htmlentities und strip_tags.
- Sessions und CookiesRufe session_start() am Anfang jeder Seite auf und speichere dann Werte in $_SESSION['key']; PHP hält sie auf dem Server und erkennt den Besucher über ein Cookie wieder. setcookie('name', 'value', $options) speichert einen kleinen Wert im Browser, den du aus $_COOKIE zurückliest. Hier: Anmelden, Abmelden, Flash-Meldungen, Cookie-Optionen und die Sicherheitseinstellungen.
- password_hash()Hashe ein Passwort mit password_hash($password, PASSWORD_DEFAULT), speichere das 60 Zeichen lange Ergebnis und prüfe einen Login mit password_verify($password, $hash). Hier: warum sich der Hash jedes Mal ändert, Cost, password_needs_rehash, Argon2id und warum md5 und sha1 für Passwörter falsch sind.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) liefert den Wert, wenn er gültig ist, und sonst false; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL und FILTER_VALIDATE_IP funktionieren genauso. Hier: die Optionen (min_range, default), Flags, Sanitize-Filter und die Falle false gegen 0.
- PDOPDO ist die Datenbankschicht von PHP: Verbinde dich mit new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass) und führe dann jede Abfrage mit Werten über prepare() und execute([$value]) aus. Hier: Verbinden, Prepared Statements, Zeilen abrufen, Inserts, Transaktionen und WHERE IN.
- ComposerComposer ist der Paketmanager von PHP: composer require vendor/package lädt eine Bibliothek nach vendor/, trägt sie in composer.json ein, und require 'vendor/autoload.php' lädt sie. Hier: Composer installieren, composer.json, Versionsangaben, install vs update und PSR-4-Autoloading für deine eigenen Klassen.
Debugging und Übung
- var_dump() und print_r()print_r($array) gibt ein Array in lesbarer Form aus, var_dump($value) zeigt zusätzlich jeden Typ und jede Länge, und var_export gibt gültigen PHP-Code aus. Hier: wann du welche verwendest, wie du print_r als String bekommst und wie du in HTML mit <pre> formatiert ausgibst.
- Interviewfragen24 PHP-Interviewfragen mit kurzen, korrekten Antworten für PHP 8, von == vs === und isset vs empty bis zu Referenzen in foreach, self vs static, Generatoren, SQL-Injection und Passwort-Hashing. Die meisten Antworten haben Code, den du ausführen und ändern kannst.