Feature Flags in PHP: Funktionalität ohne Deployment steuern

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Feature Flags in PHP: Features ohne Deployment und Gebete umschalten

\n\n

Stell 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\n

Feature 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\n

Warum brauchst du Feature Flags in PHP-Projekten?

\n\n

Angenommen, 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\n

Wann 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
\n\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\n

Einfachste Implementierung: Config-Datei

\n\n

Fangen 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\n

Verwendung 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\n

Der 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\n

Fortgeschrittenes Level: Speicherung in der Datenbank

\n\n

Wenn 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\n

Erstelle eine einfache Tabelle:

\n\n
CREATE 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\n

Und schreibe einen einfachen Service für die Arbeit mit den Flags:

\n\n
class 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]                

Blogs

Buchempfehlungen