yohang/finite

简单的PHP有限状态机

安装数: 2,964,166

依赖者: 21

建议者: 2

安全性: 0

星标: 1,305

关注者: 58

分支: 186

开放问题: 61

1.3.5 2022-04-08 12:40 UTC

README

Finite 是一个简单的状态机,用PHP编写。它可以管理任何有状态的对象,通过定义状态和这些状态之间的转换。

Build Status Latest Stable Version Total Downloads License Scrutinizer Code Quality Code Coverage SensioLabsInsight Dependency Status Reference Status Gitter

特性

  • 管理对象的状态/转换图
  • 定义和检索状态属性
  • 事件监听转换
  • Symfony2集成
  • 自定义状态图加载器
  • Twig扩展

文档

master(1.1)版本文档

入门

安装(通过composer)

{
      "require": {
        "yohang/finite": "~1.1"
    }
}

版本说明

如果你在Symfony项目中使用这个库,1.1版本只兼容Symfony >=2.6。1.0版本兼容Symfony >=2.3, <2.6

定义你的有状态对象

你的有状态对象只需要实现 StatefulInterface 接口。

use Finite\StatefulInterface;

class Document implements StatefulInterface
{
        private $state;
        public function setFiniteState($state)
        {
                $this->state = $state;
        }

        public function getFiniteState()
        {
            return $this->state;
        }
}

初始化简单的状态机

use Finite\StateMachine\StateMachine;
use Finite\State\State;
use Finite\State\StateInterface;

// $document = retrieve your stateful object

$sm = new StateMachine();

// Define states
$sm->addState(new State('s1', StateInterface::TYPE_INITIAL));
$sm->addState('s2');
$sm->addState('s3');
$sm->addState(new State('s4', StateInterface::TYPE_FINAL));

// Define transitions
$sm->addTransition('t12', 's1', 's2');
$sm->addTransition('t23', 's2', 's3');
$sm->addTransition('t34', 's3', 's4');
$sm->addTransition('t42', 's4', 's2');

// Initialize
$sm->setObject($document);
$sm->initialize();

// Retrieve current state
$sm->getCurrentState();

// Can we process a transition ?
$sm->can('t34');