Feature Flags in PHP: Features ohne Deployment und Gebete umschalten
\n\nStell dir vor: Du hast ein neues Feature ausgerollt – und alles ist kaputt. Die Website liegt flach, Kunden sind in Panik, die DevOps kratzen sich am Kopf. Kommt dir bekannt vor? Und jetzt stell dir vor, du könntest dieses Feature nur für 5% der Nutzer aktivieren, die Metriken beobachten und, falls etwas schiefgeht, einfach einen Schalter umlegen und alles rückgängig machen. Ohne Deployment, ohne Commits, ohne Schmerz. Das ist keine Magie, das sind Feature Flags in PHP.
\n\nFeature Flags (auch Feature-Flags oder Feature Toggles genannt) sind eine Technik, mit der du die Funktionalität deiner Anwendung ein- und ausschalten kannst, ohne den Code zu ändern oder erneut auszurollen. Klingt nach einer Superkraft? Ist es auch. In diesem Artikel zeigen wir dir, wie du Funktionssteuerung in PHP in echten Projekten implementierst: von einer einfachen Config bis zur Integration mit Symfony und Laravel. Los geht's!
\n\nWarum brauchst du Feature Flags in PHP-Projekten?
\n\nAngenommen, du entwickelst einen Online-Shop mit PHP. Der Kunde möchte ein neues Zahlungs-Gateway integrieren. Du schreibst den Code, testest lokal, aber in der Produktion gibt es eine Überraschung: Das Gateway läuft instabil. Normalerweise bedeutet das: schneller Fix, nächtliches Deployment, nervöser Teamleiter. Mit Feature Flags ist alles anders. Du deaktivierst einfach das Flag, und das alte Zahlungs-Gateway läuft weiter, während du in Ruhe den Bug behebst.
\n\nWann Feature Flags besonders nützlich sind:
\n- \n
- Canary Releases (kanarische Releases) – Feature für 1% der Nutzer aktivieren, dann für 10%, dann für alle. \n
- A/B-Testing – Verschiedenen Gruppen unterschiedliche Funktionalität zeigen und die Conversion vergleichen. \n
- Deaktivieren defekter Funktionalität – Bug in der Produktion? Flag deaktivieren, ohne das gesamte Release zurückzurollen. \n
- Schrittweiser Rollout – Feature nach und nach ausrollen, um die Server nicht zu überlasten. \n
Und das Wichtigste: Feature Flags in PHP reduzieren das Deployment-Risiko. Du hörst auf, Angst davor zu haben, am Freitagabend zu committen (na ja, fast).
\n\nEinfachste Implementierung: Config-Datei
\n\nFangen wir mit den Grundlagen an. Der einfachste Weg ist, die Flags in einer Konfigurationsdatei zu speichern. Zum Beispiel als PHP-Array oder JSON.
\n\n// config/features.php\nreturn [\n 'new_checkout' => false,\n 'dark_mode' => true,\n 'ai_recommendations' => false,\n];\n\n\nVerwendung im Code:
\n\n// src/CheckoutService.php\n$features = require __DIR__ . '/config/features.php';\n\nif ($features['new_checkout']) {\n // Neue Logik für den Bestellvorgang\n $this->processWithNewGateway();\n} else {\n // Alte Logik\n $this->processWithOldGateway();\n}\n\n\nDer Nachteil ist offensichtlich: Um ein Flag zu ändern, musst du die Datei auf dem Server bearbeiten. Das ist umständlich und unsicher. Aber für kleine Projekte reicht es. Hauptsache, du verstehst das Prinzip: PHP Feature Flags sind einfach bedingte Anweisungen, die an einen externen Speicher gekoppelt sind.
\n\nFortgeschrittenes Level: Speicherung in der Datenbank
\n\nWenn das Projekt wächst, wird die Config-Datei zum Engpass. Du möchtest die Flags über ein Admin-Panel verwalten. Hier kommt die Datenbank ins Spiel.
\n\nErstelle eine einfache Tabelle:
\n\nCREATE TABLE feature_flags (\n id INT AUTO_INCREMENT PRIMARY KEY,\n name VARCHAR(100) UNIQUE NOT NULL,\n enabled TINYINT(1) DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\n\nUnd schreibe einen einfachen Service für die Arbeit mit den Flags:
\n\nclass FeatureFlagService\n{\n private PDO $pdo;\n private array $cache = [];\n\n public function __construct(PDO $pdo)\n {\n $this->pdo = $pdo;\n }\n\n public function isEnabled(string $flagName): bool\n {\n if (!isset($this->cache[$flagName])) {\n $stmt = $this->pdo->prepare(\n 'SELECT enabled FROM feature_flags WHERE name = ?'\n );\n $stmt->execute([$flagName]);\n $row = $stmt->fetch(PDO::FETCH_ASSOC);\n $this->cache[$flagName]