phputil/flags

一个轻量级、可扩展的PHP特性开关框架

v0.6.0 2024-05-15 22:02 UTC

This package is auto-updated.

Last update: 2024-09-15 22:38:39 UTC


README

Version Build License PHP

🚩 一个轻量级、可定制的 特性开关 框架,用于PHP

您可以自定义

  • 🧠 如何评估标志,通过 策略
  • 💾 如何存储标志,通过 存储
  • 📢 通知谁关于标志更改或删除,通过 监听器

安装

PHP 7.4或更高版本。无外部依赖。

composer require phputil/flags

👉 您可能还希望安装一些官方的 扩展

扩展

官方扩展

第三方扩展

  • 创建您自己的,并提交问题进行评估。它可能在这里出现。

用法

基本标志检查

require_once 'vendor/autoload.php';
use phputil\flags\FlagManager;

// By default, it uses a storage-based strategy with an in-memory storage
$flag = new FlagManager();

if ( $flag->isEnabled( 'my-cool-feature' ) ) {
    echo 'Cool feature available!', PHP_EOL;
} else {
    echo 'Not-so-cool feature here', PHP_EOL;
}

自定义特定验证

// ...
use phputil\flags\FlagVerificationStrategy;

$flag = new FlagManager();

$myLuckBasedStrategy = new class implements FlagVerificationStrategy {
    function isEnabled( string $flag ): bool {
        return rand( 1, 100 ) >= 50; // 50% chance
    }
};

if ( $flag->isEnabled( 'my-cool-feature', [ $myLuckBasedStrategy ] ) ) {
    echo 'Cool feature available!', PHP_EOL;
} else {
    echo 'Not-so-cool feature here', PHP_EOL;
}

自定义所有验证

$flag = new FlagManager( null, [ $myLuckBasedStrategy ] );

if ( $flag->isEnabled( 'my-cool-feature' ) ) {
    ...

设置标志

$flag->enable( 'my-cool-feature' );
$flag->disable( 'my-cool-feature' );
$flag->setEnable( 'my-cool-feature', true /* or false */ );

删除标志

$flag->remove( 'my-cool-feature' );

检索标志数据

$flagData = $flag->getStorage()->get( 'my-cool-feature' ); // null if not found

添加监听器

// ...
use phputil\flags\FlagListener;
use phputil\flags\FlagData;

$myListener = new class implements FlagListener {
  public function notify( string $event, FlagData $flagData ): void {
    if ( $event === 'change' ) {
        echo 'Flag ', $flagData->key, ' is now ', $flagData->enabled ? 'enabled': 'disabled', PHP_EOL;
    } else if ( $event === 'removal' ) {
        echo 'Flag ', $flagData->key, ' was removed.', PHP_EOL;
    }
  }
};

$flag->addListener( $myListener ); // v0.5.0+
// or $flag->getListeners()->add( $myListener );

$flag->enable( 'my-cool-feature' ); // Notify the listener

自定义

存储

通过

如何配置它

$storage = /* Create your storage here, e.g. new InMemoryStorage() */;
$flag = new FlagManager( $storage );

框架中可用的存储

策略

通过以下方式使用标志验证策略

如何全局配置它

$strategies = [ /* pass your strategies here   */ ];
$flag = new FlagManager( null, $strategies );

框架中可用的策略

👉 当所有考虑的策略都将其视为启用时,标志被视为启用。

监听器

通过以下方式定义监听器

如何配置它

$flag->addListener( $myListener ); // v0.5.0+
// or $flag->getListeners()->add( $myListener );

路线图

  • 可扩展库
  • 官方扩展
    • PDO 基础存储
    • 基于 Firebase 的存储
    • 类似 Webhook 的监听器
  • REST API(外部仓库)
  • 基于 Web 的控制面板(外部仓库)

许可证

MIT © Thiago Delgado Pinto