PHP Feature Flags entwickeln und einsetzen

PHP Feature Flags sind eine super Möglichkeit Arbeit zu verbessern im Code

Viele Entwickler/innen starten mit PHP, indem sie sich mit den Grundlagen vertraut machen: Variablen, Funktionen, Klassen, Methoden – all das bildet das Fundament. Doch sobald man an größeren Projekten arbeitet, reicht dieses Wissen allein nicht mehr aus. Es geht dann um Wartbarkeit, Flexibilität und kontrollierte Weiterentwicklung. Vor kurzen haben wir uns mit der MVP Struktur in PHP befasst. In diesem Fall kommen genau hier nun als nächste wichtige Idee Feature Flags ins Spiel.

Was sind eigentlich Feature Flags?

Die Frage kommt wahrscheinlich als erstes auf. Man hört es in der Ausbildung, Weiterbildung oder Umschulung eher selten. Doch es ist sehr nützlich. Feature Flags (auch „Feature Toggles“) sind kleine Schalter im Code, mit denen du bestimmte Funktionen gezielt aktivieren oder deaktivieren kannst – ohne den Code zu löschen oder umzuschreiben. Sie ermöglichen dir:

  • Neu Funktionen schrittweise zu veröffentlichen
  • A/B Tests zu ermöglichen
  • Beta Funktionen nur für Beta Tester zu veröffentlichen
  • Debugging Funktionen Temporär zu aktivieren
  • Alte Funktionen sicher abzuschalten

Sie bieten also eine tolle Möglichkeit, die deutlich mehr in PHP Code vorkommen sollte, aber gerade von Neulingen eher weniger umgesetzt werden.

Warum sind sie also für Einsteiger relevant?

Es sollte sich rein durch die obige Erklärung schon ergeben, warum die relevanz vorhanden ist. Auch wenn Feature Flags eher in größeren Anwendungen genutzt werden, sollte man sie verstehen und auch schon in seinen Code einbauen um sie als Standart durchzusetzen bei sich selber. Sie geben einen guten Pfad für zukünftige Projekte. Darunter ergibt sich die Förderung folgender Punkte:

  • Modularität: Du lernst, Funktionen voneinander zu entkoppeln.
  • Testbarkeit: Du kannst neue Features isoliert testen.
  • Wartbarkeit: Du vermeidest „Code-Leichen“ und temporäre Hacks.
  • Teamarbeit: Flags helfen, Code gemeinsam zu entwickeln, ohne Konflikte.

Wie wir Feature Flags in PHP implementieren

Das ganze brauch tatsächlich keinen großen Aufwand und ich möchte es nun Anhand von einem kleinen aber verständlichen Beispiel näher bringen. Dazu nutzen wir die Thematik Wartbarkeit und Release.

Die Konfigurationsdatei

Zuerst erstellen wir eine einfache Datei, die unsere Feature-Flags enthält. Diese Datei nennen wir nun features.php, welche ich grundlegend in einen Module Ordner packe. Dadurch das wir Wartbarkeit und Release umsetzen wollen, setzen wir also auf folgende Unterpunkte die wir durch unsere Feature Flag erfüllen wollen:

  • Eine Beta Version die anschaltbar ist
  • Ein Darkmode für die Programmierer und unsere Augen
  • Eine Navigationskontrolle

Unsere features.php macht nun nichts anderes als ein simplen return auszugeben, der Boolean Werte bestimmt (also false und true):

<?php

return [
    'dark_mode' => false,
    'new_navigation' => true,
    'beta_mode' => false,
];

wir setzen also die Schlüssel dark_mode, new_navigation, beta_mode und dann die entsprechenden Werte, in dem Fall ist der DarkMode am Anfang immer aus, die Navigationskontrolle an und der Betatester Modus aus.

Diese Datei macht also wie erwähnt, nicht anderes, als das sie ein Array zurück gibt, in dem jeder Schlüssel ein Feature ist und der Wert angibt, ob es aktiviert ist. Bis hier hin ganz einfach.

Die Helfer Funktion programmieren

Um nun zu ermöglichen das wir unser Feature Flag System auch nutzen können und somit ein Schritt weiter sind an einer besseren Arbeit mit weniger Stress, müssen wir eine Helfer Funktion Schreiben, die unsere Features prüft und entsprechende Werte wiedergibt. Dazu schreiben wir erstmal in eine Datei unserer Wahl (ich habe immer eine functions.php für kleine Funktionen) nun eine neue Funktion:

<?php
function isFeatureEnabled(string $feature): bool {
    
}

Diese Funktion nimmt einen String $feature entgegen und den bool Wert. Wir müssen nun also sicher gehen, das in unserer Helferfunktion unsere Konfigurationsdatei nur einmal geladen wird, das können wir mit einer static umsetzen. Wir bauen also am Anfang unserer Funktion nun eine Static ein:

    static $features = null;

Unsere $features hat also am Anfang keinen Wert. Das bestimmen wir durch das null. Um aber nun einen Wert einzuarbeiten, müssen wir natürlich weiteren Code einarbeiten. Hier arbeiten wir mit einer IF-Anweisung, die genau das für uns tut:

if ($features === null) {
        $features = include __DIR__ . './Module/features.php';
    }

Die IF-Anweisung prüft hier ob unsere $features identisch (===) zu null ist. Wenn dieses zutreffend ist, dann packt er in die Statische Variable nun durch include unsere Datei. Sollte dieses aber nicht zutreffend sein, so brauchen wir natürlich auch eine passende Reaktion. Diese ermöglichen wir durch einen Return nach der IF:

return $features[$feature] ?? false;

Wenn das Feature also nicht existiert, wird false zurückgegeben. Wir arbeiten hier mit einem so genannten Null Coalescing Operator (Null-Kombinierungs-Operator) der durch ?? gesetzt wird. Und es ist am Ende dadurch eine Abgekürzte Form von einer großen IF-Anweisung. Die Ausgeschrieben wie folgt aussehen würde:

if (isset($features[$feature])) {
    return $features[$feature];
} else {
    return false;
}

Wir sparen uns dadurch also Zeilen ein und machen es auch übersichtlicher. Als Übersicht noch mal für dich, was unsere Helfer Funktion für unsere Feature Flag nun tut:

  • Die Funktion lädt die Konfigurationsdatei nur einmal (durch static).
  • Sie prüft, ob das angefragte Feature existiert und gibt den entsprechenden Wert zurück.
  • Falls das Feature nicht existiert, wird false zurückgegeben.

Wie können wir die Feature Flags im Code nun verwenden?

Du kannst dieses nun durch eine ganz einfach IF-Anweisung überall in deinem Code anwenden und nutzen. Wir haben durch wenig Arbeit nun ein funktionierendes System, was uns unterstützt. In dem Fall von diesem Beispiel würde der Einbau als Code wie folgt aussehen:

<?php
if (isFeatureEnabled('new_navigation')) {
    include 'navigation-new.php';
} else {
    include 'navigation.php';
}

Also Wenn (IF) die Helferfunktion ’new_navigation‘ findet und als aktiviert ansieht durch unsere Konfigurationsdatei (true zurück gibt) dann baue für dieses Beispiel die Datei ’navigation-new.php‘ ein, aber wenn die Funktion nicht als aktiviert zu finden ist, dann baue die gewohnte navigation.php ein.

Das ganze ist nun ein Vorgang um Dateien einzubinden. Das haben wir bei unserem Beispiel bei der Navigation wie auch bei den Beta Tester Funktionen die man vielleicht aktivieren will. Der DarkMode wiederum, der muss ja als eine class geladen werden innerhalb von unserem HTML. Die Umsetzung ist aber genau so einfach und findet seinen Weg über den Code:

<body class="<?php echo isFeatureEnabled('dark_mode') ? 'dark' : 'light' ?>">

Er macht genau die gleiche Arbeit. Der PHP Code prüft ob das Feature aktiviert ist und über einen Ternäre Operator (?) gibt er dann die class dark an wenn true zurück gegeben wird und light wenn false zurück gegeben wird.

Fazit zu Feature Flags

Wie ihr seht könnt ihr mit dieser Möglichkeit und ein wenig Arbeit viel Wartbarkeit erzeugen und auch die Arbeit erleichter. Spannend hierzu ist es auch das ganze zu erweitern und dadurch zu ermöglichen, das man zum Beispiel mit zeitgesteuerten Flags Sessionale Veränderungen im Design automatisiert umschalten kann oder auch Zeitlich begrenzte Tests oder Aktionen durchführen kann. Hier könnt ihr euch mit dem neuen Wissen ja mal ran setzen und selber versuchen das ganze so zu erweitern das ihr vielleicht auch eine zeitgesteuerte Handlung mit einbaut.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert