Wie man ein PHP-Vorstellungsgespräch besteht: Top-Fragen auf fortgeschrittenem Niveau
Ein Vorstellungsgespräch für die Position eines Senior PHP-Entwicklers ist nicht nur eine Überprüfung der Syntax. Der Arbeitgeber bewertet architektonisches Denken, Verständnis der internen Funktionsweise der Sprache, Erfahrung mit hochbelasteten Systemen und Kenntnis moderner Standards. In diesem Artikel analysieren wir die wichtigsten Fragen auf fortgeschrittenem Niveau mit praktischen Beispielen, die Ihnen helfen, das technische Interview souverän zu bestehen.
1. SOLID in PHP: Prinzipien und Beispiele für Verstöße
Die Frage nach SOLID ist ein Klassiker in jedem Vorstellungsgespräch. Wichtig ist nicht nur, die Prinzipien aufzuzählen, sondern auch zu zeigen, wie deren Verletzung zu Problemen führt und wie man sie behebt.
Prinzip der einzigen Verantwortung (SRP). Eine Klasse sollte nur einen Grund für eine Änderung haben. Betrachten wir einen typischen Verstoß:
class User { public function save() { /* Speichern in der DB */ } public function sendEmail() { /* E-Mail senden */ } public function generateReport() { /* Bericht generieren */ }}Hier ist die Klasse User sowohl für das Speichern als auch für Benachrichtigungen und Berichte verantwortlich. Der richtige Ansatz ist, jede Verantwortung in einen separaten Service auszulagern:
class UserRepository { public function save(User $user) { /* ... */ }}
class MailService { public function sendWelcomeEmail(User $user) { /* ... */ }}
class ReportGenerator { public function generate(User $user) { /* ... */ }}Prinzip der Offenheit/Geschlossenheit (OCP). Klassen sollten für Erweiterungen offen, aber für Modifikationen geschlossen sein. Verwenden Sie anstelle von if-else Polymorphismus:
// Verstoß gegen OCPclass PaymentProcessor { public function pay(string $type) { if ($type === 'credit_card') { /* ... */ } elseif ($type === 'paypal') { /* ... */ } }}
// Richtige Lösunginterface PaymentMethod { public function process();}
class CreditCardPayment implements PaymentMethod { public function process() { /* ... */ }}
class PayPalPayment implements PaymentMethod { public function process() { /* ... */ }}
class PaymentProcessor { public function pay(PaymentMethod $method) { $method->process(); }}Erwähnen Sie im Vorstellungsgespräch unbedingt, dass für PHP auch das Prinzip der Abhängigkeitsinversion (DIP) wichtig ist – Abhängigkeit von Abstraktionen, nicht von konkreten Klassen. Zeigen Sie ein Beispiel mit Dependency Injection:
class OrderService { private PaymentMethod $paymentMethod; public function __construct(PaymentMethod $paymentMethod) { $this->paymentMethod = $paymentMethod; } public function checkout() { $this->paymentMethod->process(); }}2. Entwurfsmuster: Wann und warum
Fragen zu Entwurfsmustern im Vorstellungsgespräch prüfen, ob Sie typische Lösungen in realen Aufgaben anwenden können. Es reicht nicht, das Muster nur zu nennen – Sie müssen erklären, welches Problem es löst.
Singleton. Wird für Objekte verwendet, die nur in einer einzigen Instanz existieren sollen (z. B. Datenbankverbindung). Seien Sie jedoch auf Kritik vorbereitet: Viele halten Singleton aufgrund versteckter Abhängigkeiten und Testprobleme für ein Anti-Pattern.
class Database { private static ?Database $instance = null; private function __construct() { } public static function getInstance(): Database { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; }}Factory Method. Erstellt Objekte ohne Angabe einer konkreten Klasse. Besonders nützlich bei der Arbeit mit verschiedenen Verbindungstypen:
interface Connection { }class MysqlConnection implements Conn