So bestehst du das PHP-Vorstellungsgespräch: Analyse der Top-Fragen
Ein Vorstellungsgespräch für die Position eines PHP-Entwicklers ist nicht nur eine Überprüfung der Syntax, sondern auch ein Test des Verständnisses von Architektur, Sicherheit und modernen Standards (PSR). In diesem Artikel haben wir 10 Schlüsselfragen zusammengestellt, die am häufigsten in Vorstellungsgesprächen für Junior- und Middle-Level gestellt werden. Jede Frage wird von einer Erklärung, einem Codebeispiel und typischen Fallstricken begleitet.
1. Was ist der Unterschied zwischen echo und print? Und zwischen print_r und var_dump?
Dies ist eine grundlegende Frage, die das Wissen über eingebaute Ausgabefunktionen testet.
echo— ein Sprachkonstrukt, gibt keinen Wert zurück. Arbeitet schneller alsprint.print— ebenfalls ein Konstrukt, gibt aber immer1zurück. Kann in Ausdrücken verwendet werden.print_r— gibt menschenlesbare Informationen über eine Variable aus (Arrays, Objekte). Gibt einen String zurück, wenn der zweite Parametertrueist.var_dump— gibt den Typ und den Wert einer Variable aus, einschließlich der String-Länge. Nützlich für das Debugging.
<?php$arr = ['a' => 1, 'b' => 2];echo print_r($arr, true); // Gibt einen String zurück, gibt nicht sofort ausvar_dump($arr); // array(2) { ["a"]=> int(1) ["b"]=> int(2) }?>2. Was ist Autoloading von Klassen und wie funktioniert es mit Composer?
Autoloading ermöglicht es PHP, Klassen automatisch beim ersten Zugriff auf sie zu laden, ohne explizites require_once.
- Früher wurde die Funktion
spl_autoload_register()verwendet. - Heute ist der De-facto-Standard Composer und sein Autoloader.
- Composer unterstützt PSR-4 (Namespaces) und PSR-0 (veraltet).
// composer.json{ "autoload": { "psr-4": { "App\\\\": "src/" } }}
// Nach composer dump-autoload// Datei src/User.php mit namespace App;$user = new \\App\\User(); // Wird automatisch geladen3. Unterschied zwischen include, require, include_once und require_once
Eine Frage zum Verständnis der Arbeit mit externen Dateien und der Fehlerbehandlung.
include— gibt eine Warning aus, wenn die Datei nicht gefunden wird, das Skript läuft weiter.require— gibt einen Fatal Error aus, das Skript wird gestoppt.*_once— prüft, ob die Datei bereits zuvor eingebunden wurde, und bindet sie nicht erneut ein.
Fallstrick: include in einer Schleife kann zu erneutem Einbinden und einem Fehler wegen Neudefinition von Funktionen führen, wenn nicht include_once verwendet wird.
4. Wie funktioniert PDO und warum ist es besser als die mysql_* Funktionen?
PDO (PHP Data Objects) ist eine Schnittstelle für die Arbeit mit Datenbanken. Die Kenntnis davon ist für jeden modernen PHP-Entwickler obligatorisch.
- Unterstützt verschiedene DBMS (MySQL, PostgreSQL, SQLite) — es reicht, das DSN zu ändern.
- Verwendet Prepared Statements, was vor SQL-Injection schützt.
- Komfortable Arbeit mit Transaktionen und Fehlerbehandlung durch Exceptions.
<?php$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';$pdo = new PDO($dsn, 'user', 'pass', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');$stmt->execute(['email' => $email]);$user = $stmt->fetch(PDO::FETCH_ASSOC);?>5. Was sind magische Methoden in PHP? Nenne Beispiele
Magische Methoden beginnen mit einem doppelten Unterstrich (__) und werden automatisch bei bestimmten Aktionen mit einem Objekt aufgerufen.
__construct()— wird beim Erstellen eines Objekts aufgerufen.__get()/__set()— werden beim Zugriff auf bzw. Setzen von nicht zugänglichen Eigenschaften aufgerufen.__call()/__callStatic()— werden beim Aufruf nicht zugänglicher Methoden aufgerufen.__toString()— wird aufgerufen, wenn ein Objekt als String behandelt werden soll.__invoke()— wird aufgerufen, wenn ein Objekt als Funktion aufgerufen wird.
<?phpclass User { private $data = [];
public function __get($name) { return $this->data[$name] ?? null; }
public function __set($name, $value) { $this->data[$name] = $value; }
public function __toString() { return $this->data['name'] ?? 'Unbekannt'; }}
$user = new User();$user->name = 'Max'; // Ruft __set aufecho $user->name; // Ruft __get aufecho $user; // Ruft __toString auf?>