Wie man ein PHP-Vorstellungsgespräch besteht: Top-Fragen für Fortgeschrittene
\n\nEin Vorstellungsgespräch für eine Senior-PHP-Entwicklerposition testet nicht nur die Syntax, sondern auch das tiefe Verständnis von Architektur, Leistung und modernen Standards. In diesem Artikel behandeln wir fortgeschrittene Fragen, die häufig in technischen Interviews gestellt werden, und geben ausführliche Antworten mit Codebeispielen. Der Artikel ist sowohl für die Vorbereitung auf ein Vorstellungsgespräch als auch zur Verbesserung Ihrer Fähigkeiten nützlich.
\n\n1. SOLID-Prinzipien in PHP: Von der Theorie zur Praxis
\n\nEiner der beliebtesten Frageblöcke ist das Wissen und die Anwendung der SOLID-Prinzipien. Der Interviewer möchte sehen, wie Sie eine flexible und wartbare Architektur entwerfen.
\n\nFrage: "Erklären Sie das Open/Closed-Prinzip (OCP) am Beispiel von PHP."
\n\nAntwort: Klassen sollten für Erweiterungen offen, aber für Modifikationen geschlossen sein. Anstatt vorhandenen Code zu ändern, fügen wir neuen hinzu.
\n\nBeispiel für eine OCP-Verletzung:
\n<?php\nclass ReportGenerator {\n public function generate($type) {\n if ($type === 'pdf') {\n // PDF-Generierung\n } elseif ($type === 'csv') {\n // CSV-Generierung\n }\n }\n}\n\n\nLösung unter Einhaltung von OCP:
\n<?php\ninterface ReportInterface {\n public function generate(): string;\n}\n\nclass PdfReport implements ReportInterface {\n public function generate(): string {\n return 'PDF-Inhalt';\n }\n}\n\nclass CsvReport implements ReportInterface {\n public function generate(): string {\n return 'CSV-Inhalt';\n }\n}\n\nclass ReportGenerator {\n public function generate(ReportInterface $report): string {\n return $report->generate();\n }\n}\n\n\nDieser Ansatz ermöglicht das Hinzufügen neuer Berichtsformate, ohne den vorhandenen Code von ReportGenerator zu ändern.
2. Entwurfsmuster: Singleton, Factory und Dependency Injection
\n\nKenntnisse über Entwurfsmuster sind eine zwingende Voraussetzung für eine Senior-Position. Am häufigsten wird nach Singleton, Factory und Dependency Injection gefragt.
\n\nFrage: "Implementieren Sie das Singleton-Muster in PHP und erklären Sie, wann es verwendet wird."
\n\nAntwort: Singleton stellt sicher, dass eine Klasse nur eine einzige Instanz hat. Es wird für Datenbankverbindungen, Logger oder Konfigurationen verwendet.
\n\n<?php\nclass Database {\n private static $instance = null;\n private $connection;\n\n private function __construct() {\n $this->connection = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n }\n\n public static function getInstance(): self {\n if (self::$instance === null) {\n self::$instance = new self();\n }\n return self::$instance;\n }\n\n public function getConnection(): PDO {\n return $this->connection;\n }\n\n // Klonen und Deserialisierung verbieten\n private function __clone() {}\n public function __wakeup() {\n throw new \\Exception("Cannot unserialize singleton");\n }\n}\n\n// Verwendung\n$db = Database::getInstance();\n\n\nFrage: "Was ist Dependency Injection und wie implementiert man es ohne Framework?"
\n\nAntwort: DI ist die Übergabe von Abhängigkeiten an eine Klasse über den Konstruktor oder Setter, anstatt sie innerhalb der Klasse zu erstellen.
\n\n<?php\nclass Logger {\n public function log(string $message): void {\n echo $message;\n }\n}\n\nclass UserService {\n private Logger $logger;\n\n // Abhängigkeitsinjektion über den Konstruktor\n public function __construct(Logger $logger) {\n $this->logger = $logger;\n }\n\n public function createUser(array $data): void {\n // Logik zur Benutzererstellung\n $this->logger->log('Benutzer erstellt');\n }\n}\n\n// Verwendung\n$logger =