PHP-Interviews decken Sprachsemantik, OOP, Laravel oder Symfony, MySQL sowie grundlegende Web-Sicherheit ab. Hier findest du die häufigsten Fragen mit Musterantworten.
Zu jeder Frage gibt es eine Musterantwort, mit der du deine eigene vergleichen kannst.
1
Was ist der Unterschied zwischen == und === in PHP?
Antwort
== vergleicht Werte nach Type Juggling, während === zusätzlich verlangt, dass die Typen übereinstimmen. Loses Vergleichen führt zu bekannten Überraschungen: "abc" == 0 war vor PHP 8 wahr, und "1e2" == "100" ist es bis heute, weil beide Strings numerisch aussehen. Die Regel im Produktivcode lautet: immer === verwenden, außer du hast einen konkreten Grund dagegen.
2
Was sind Traits? Wie unterscheiden sie sich von Vererbung und Interfaces?
Antwort
Ein Trait ist ein Block aus Methoden und Eigenschaften, den man in eine Klasse einmischen kann, um PHPs Einfachvererbung zu umgehen. Ein Interface deklariert einen Vertrag ohne Implementierung; Vererbung stellt eine Ist-Ein-Beziehung zu genau einem Elternteil her; ein Trait liefert wiederverwendbare Implementierung ohne Typbeziehung. Konflikte zwischen Traits müssen explizit mit insteadof oder as aufgelöst werden.
3
Erkläre die SOLID-Prinzipien anhand von PHP-Beispielen.
Antwort
Single Responsibility: Eine Klasse hat genau einen Grund, sich zu ändern, ein Controller erzeugt also nicht nebenbei auch noch PDFs. Open/Closed: Verhalten wird durch neue Klassen erweitert, nicht durch Änderungen an bestehenden. Liskov: Eine Subklasse muss überall einsetzbar sein, wo die Elternklasse erwartet wird. Interface Segregation: viele kleine Interfaces sind besser als ein einziges, überladenes. Dependency Inversion: von Interfaces abhängen, die in den Konstruktor injiziert werden, nicht von konkreten, mit new erzeugten Klassen.
4
Was ist der Dependency Injection Container in Laravel und wie funktioniert er?
Antwort
Der Container löst Klassenabhängigkeiten automatisch auf, indem er die Type-Hints des Konstruktors per Reflection ausliest und rekursiv alles instanziiert, was benötigt wird. Interfaces bindest du in einem Service Provider an konkrete Implementierungen, sodass ein Austausch der Implementierung nur eine einzige Zeile Code kostet. Singleton-Bindings teilen sich eine Instanz über den gesamten Request-Lebenszyklus, was bei zustandsbehafteten Diensten wie einem Connection Pool wichtig ist.
5
Wie schützt du vor SQL-Injection? Was sind Prepared Statements?
Antwort
Ein Prepared Statement sendet die SQL-Struktur und die Parameter getrennt, sodass Nutzereingaben nie als SQL geparst werden und Fehler beim Escaping nicht zur Injection werden können. In PHP bedeutet das PDO oder mysqli mit gebundenen Parametern, oder ein ORM, das dir das abnimmt. Die Schwachstelle entsteht durch String-Konkatenation in eine Query; Escaping-Funktionen sind ein fragiler Ersatz, weil sie von Zeichensatz und Kontext abhängen.
6
Was ist Eloquent ORM? Erkläre das N+1-Problem und wie man es löst.
Antwort
Eloquent ist Laravels Active-Record-ORM, bei dem jedes Model auf eine Tabelle abgebildet wird und Beziehungen als Methoden definiert werden. N+1 entsteht, wenn du über Models iterierst und dabei eine Relation ansprichst, was pro Zeile eine eigene Query auslöst. Die Lösung ist Eager Loading mit with(), und in der Entwicklung lässt sich das Problem mit Model::preventLazyLoading() aufdecken, sodass ein lazy Zugriff eine Exception wirft statt die Performance still zu verschlechtern.
7
Was ist Middleware in Laravel? Nenne ein Anwendungsbeispiel.
Antwort
Middleware umschließt die HTTP-Request-Pipeline und erlaubt es, Code vor oder nach dem Controller auszuführen — Authentifizierung, Rate Limiting, CORS-Header, Logging. Jede Middleware bekommt den Request und eine $next-Closure, entscheidet, ob sie weitergereicht wird, und kann die Response auf dem Rückweg verändern. Weil sich Middleware komponieren lässt, bleiben Querschnittsthemen aus den Controllern heraus.
8
Wie funktioniert das Klassen-Autoloading über Composer und PSR-4?
Antwort
PSR-4 bildet ein Namespace-Präfix auf ein Verzeichnis ab, sodass App\Services\Mailer zu src/Services/Mailer.php aufgelöst wird. Composer generiert aus der Zuordnung in composer.json einen Autoloader und registriert ihn über spl_autoload_register, sodass Klassen beim ersten Gebrauch geladen werden, statt manuell per require eingebunden zu werden. In der Produktion führst du composer dump-autoload --optimize aus, um eine statische Class-Map zu erzeugen und Dateisystemzugriffe zu vermeiden.
9
Was sind XSS und CSRF? Wie schützt du eine PHP-Anwendung davor?
Antwort
XSS schleust ausführbares Skript in eine Seite ein — verhindert wird das, indem man jede Ausgabe mit htmlspecialchars oder Blades doppelten geschweiften Klammern escaped, zusätzlich zu einer Content Security Policy. CSRF verleitet den Browser eines authentifizierten Nutzers dazu, einen ungewollten Request abzuschicken — verhindert wird das durch ein Token pro Sitzung auf jedem zustandsändernden Formular sowie SameSite-Cookies. Der entscheidende Unterschied: XSS missbraucht das Vertrauen des Nutzers in die Seite, CSRF missbraucht das Vertrauen der Seite in den Browser.
10
Was ist der Unterschied zwischen include, require, include_once und require_once?
Antwort
include gibt bei fehlender Datei nur eine Warnung aus und läuft weiter; require löst einen Fatal Error aus und bricht ab. Die _once-Varianten merken sich bereits geladene Dateien und überspringen Duplikate, was Fehler durch doppelte Deklaration verhindert. In modernem Code sind alle vier weitgehend irrelevant, weil Composer-Autoloading das Laden von Klassen übernimmt, und explizite includes bleiben nur noch für Config- oder Template-Dateien übrig.
🦎
Antworten lesen reicht nicht
Im echten Interview sprichst du unter Druck. Cam stellt genau diese Fragen, bewertet jede Antwort und zeigt dir genau, was du verbessern musst.
PHP-Backend-Interview üben →Kostenlos · 3 Interviews im Monat