sysstream / feature-switch
此包提供功能开关功能。支持A/B测试和时间开关。
1.2.6
2016-11-24 21:12 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpmd/phpmd: 2.*
- phpunit/phpunit: ~5.3
README
安装
您可以通过 packagist.org 使用 composer 安装此包。
composer require systream/feature-switch
composer.json
"require": { "systream/feature-switch": "1.*" }
此库需要 php 5.6
或更高版本。
使用示例
默认情况下,功能未启用。
$feature = new Feature('foo_bar_feature_key'); $feature->isEnabled(); // will return: false
如果您想更改功能状态,您必须设置一个或多个开关。
开关(/ 切换器 / 翻转器)
简单
您可以轻松地启用一个功能
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher(Simple::on()); $feature->isEnabled(); // will return: true
A/B测试
这将使功能大约50%的访客可用。功能状态通过cookie跟踪,因此如果访客返回,则将显示相同的功能状态。
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher(new AB()); $feature->isEnabled();
基于时间的切换
使用此库,您还可以设置基于时间的功能切换。例如,您的新功能将在某个时间点后对每个访客可用。
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher(new Until(\DateTime::createFromFormat('Y-m-d H:i:s', '2017-08-12 10:00:00'))); $feature->isEnabled(); // brefore 2017-08-12 10:00:00 it's return false, after will return true
如果您想在某个日期后禁用功能
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher(new Until(\DateTime::createFromFormat('Y-m-d H:i:s', '2017-08-12 10:00:00'), false)); $feature->isEnabled(); // brefore 2017-08-12 10:00:00 it's return true, after will return false
回调
对于自定义情况
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher( new Callback(function() { /* do custom logic */ return true; }) ); $feature->isEnabled();
编写自定义开关
您需要做的唯一一件事是您的类需要实现 FeatureSwitcherInterface
接口。
添加多个开关/切换
$feature = new Feature('foo_bar_feature_key'); $feature->addSwitcher(new AB()); $feature->addSwitcher(new Until(\DateTime::createFromFormat('Y-m-d H:i:s', '2017-08-12 10:00:00'))); $feature->isEnabled();
功能将传递到所有开关,直到其中一个返回true;在这种情况下,功能将首先与AB开关进行测试,如果返回false,则传递到下一个基于时间的开关。
FeatureSwitch
简单功能构建器
$feature1 = FeatureSwitch::buildFeature('foo_feature', true); // enabled $feature2 = FeatureSwitch::buildFeature('another_bar_feature', false); // disabled
容器
$featureSwitch = new FeatureSwitch(); $featureSwitch->addFeature(FeatureSwitch::buildFeature('foo', true)); $feature = new Feature('bar2'); $feature->addSwitcher(new AB()); $featureSwitch->addFeature($feature);
$featureSwitch->isEnabled('foo'); // true $featureSwitch->isEnabled('bar2');
FeatureSwitchArray
此类用数组访问支持装饰了 FeatureSwitch
。
您可以将 FeatureSwitchArray 类用作数组
$featureSwitch = new FeatureSwitchArray(); $featureSwitch[] = FeatureSwitch::buildFeature('foo', true); $featureSwitch->isEnabled('foo'); // returns true $featureSwitch['foo']->isEnabled();