A simple feature flag dispatcher that allows conditional code execution based on enabled feature flags.
Feature flags are a powerful technique for managing features in your application, enabling you to toggle functionality on/off without deploying new code. This library provides a clean, interface-based approach to dispatch handlers based on feature flag states.
use ByJG\FeatureFlag\FeatureFlags;
use ByJG\FeatureFlag\FeatureFlagDispatcher;
use ByJG\FeatureFlag\FeatureFlagSelector;
use ByJG\FeatureFlag\FeatureFlagHandlerInterface;
// Initialize the enabled features
FeatureFlags::addFlag('flag1', 'value1');
FeatureFlags::addFlag('flag2', 'value2');
FeatureFlags::addFlag('flag3');
// Create handler implementations
class MyHandler implements FeatureFlagHandlerInterface
{
public function execute(mixed ...$args): mixed
{
echo "Handler executed!\n";
return null;
}
}
// Create a Dispatcher
$dispatcher = new FeatureFlagDispatcher();
// Add feature flag handlers
$dispatcher->add(FeatureFlagSelector::whenFlagIs('flag2', 'value1', new MyHandler()));
$dispatcher->add(FeatureFlagSelector::whenFlagIs('flag2', 'value2', new MyHandler()));
// Dispatch the request
$dispatcher->dispatch();
// Since there is a feature flag 'flag2' with value 'value2', the corresponding handler will be executed:::note If one or more feature flags match the condition, all matching handlers will be executed in the order they were added. :::
- Handler Interface - Create custom handlers implementing
FeatureFlagHandlerInterface - Attributes - Use PHP 8 attributes to mark methods as handlers
- FeatureFlagSelector - Single condition selectors
- FeatureFlagSelectorSet - Multiple condition selectors (ALL must match)
- Search Order - Control the order of handler execution
- Passing Arguments - Pass runtime arguments to handlers
composer require "byjg/featureflag"- PHP 8.3 to 8.5
- PSR-11 Container (optional, for container integration)
composer testflowchart TD
byjg/featureflag --> php8.3-8.5
byjg/featureflag --> psr/container