PHP-Interview: Wie starten, um nicht durchzufallen?
\n\nSie haben Ihre Bewerbung abgeschickt, ein kurzes Gespräch mit HR geführt – und nun die Einladung zum technischen Interview. Das Herz schlägt schneller: „Was, wenn sie etwas fragen, das ich nicht weiß?“, „Was, wenn ich die Syntax vergesse?“, „Was, wenn ich Code auf einem Whiteboard schreiben soll?“.
\n\nSpoiler: Das werden Sie höchstwahrscheinlich müssen. Und das ist völlig in Ordnung. Ein PHP-Interview ist keine Prüfung mit auswendig gelernten Karten, sondern ein Dialog. Aber ein Dialog, auf den man sich vorbereiten sollte. In diesem Artikel erfahren Sie, was 2025 wirklich in PHP-Interviews gefragt wird, welche Fehler 90 % der Kandidaten machen und wie Sie sich von Ihrer besten Seite zeigen.
\n\nWas wichtig ist: Die Struktur der Vorbereitung
\n\nFür eine systematische PHP-Interview-Vorbereitung teilen Sie diese in drei Blöcke auf:
\n\n- \n
- Sprachgrundlagen: Datentypen, Arrays, Funktionen, Dateioperationen, Sessions. \n
- OOP und Architektur: Vererbung, Kapselung, Polymorphie, Traits, Interfaces. \n
- Tools und Ökosystem: Composer, PSR, Frameworks, Testing, SQL. \n
Eine der häufigsten Fragen im PHP-Junior-Interview ist der Unterschied zwischen == und ===. Scheint eine Kleinigkeit, aber genau an solchen Details scheitern selbst erfahrene Entwickler.
Beispiel: Vergleich mit Typumwandlung
\n\n<?php\n// Lockerer Vergleich\nvar_dump(0 == '0'); // true\nvar_dump(0 == false); // true\nvar_dump('' == false); // true\n\n// Strenger Vergleich\nvar_dump(0 === '0'); // false\nvar_dump(0 === false); // false\nvar_dump('' === false); // false\n?>\n\nWarum ist das wichtig? Weil in echten Projekten ein lockerer Vergleich zu schwer auffindbaren Bugs führen kann – zum Beispiel bei der Prüfung, ob ein Wert in einem Array existiert, mit in_array() ohne den dritten Parameter true.
OOP in PHP: Die häufigsten Fragen
\n\nIm PHP-Interview für Middle- und Senior-Level sind OOP-Fragen Pflicht. Aber auch Junioren sollten vorbereitet sein. Hier die Top-3-Themen:
\n\n1. Traits vs Interfaces vs Abstrakte Klassen
\n\nViele verwechseln, wann man ein Trait und wann ein Interface verwendet. Merken Sie sich diese einfache Regel:
\n- \n
- Interface ist ein Vertrag. Die Klasse verpflichtet sich, die Methoden zu implementieren. \n
- Abstrakte Klasse ist eine teilweise Implementierung + Vertrag. \n
- Trait ist einfach eine Sammlung von Methoden, die in jede Klasse „eingeklebt“ werden können. \n
<?php\ninterface LoggerInterface {\n public function log(string $message): void;\n}\n\nabstract class AbstractLogger implements LoggerInterface {\n protected string $prefix;\n\n public function __construct(string $prefix) {\n $this->prefix = $prefix;\n }\n\n abstract public function formatMessage(string $message): string;\n}\n\ntrait TimestampTrait {\n public function getTimestamp(): string {\n return date('Y-m-d H:i:s');\n }\n}\n\nclass FileLogger extends AbstractLogger {\n use TimestampTrait;\n\n public function formatMessage(string $message): string {\n return $this->getTimestamp() . ' [' . $this->prefix . '] ' . $message;\n }\n\n public function log(string $message): void {\n file_put_contents('log.txt', $this->formatMessage($message) . PHP_EOL, FILE_APPEND);\n }\n}\n?>\n\n2. SOLID-Prinzipien
\n\nDas ist nicht nur eine Abkürzung. Interviewer fragen gerne: „Nennen Sie ein Beispiel für die Verletzung des Liskovschen Substitutionsprinzips (LSP).“ Das anschaulichste Beispiel ist das klassische „Quadrat erbt von Rechteck“.
\n\n<?php\n// LSP-Verletzung\nclass Rectangle {\n public function __construct(protected int $width, protected int $height) {}\n public function setWidth(int $width): void { $this->width = $width; }\n public function setHeight(int $height): void { $this->height = $height; }\n public function getArea(): int { return $this