sysstream/feature-switch

此包提供功能开关功能。支持A/B测试和时间开关。

1.2.6 2016-11-24 21:12 UTC

This package is not auto-updated.

Last update: 2024-09-24 21:41:35 UTC


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();

测试

Build Status