Finite

A Simple PHP Finite State Machine

  • Owner: yohang/Finite
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

Finite, A Simple PHP Finite State Machine

Finite is a Simple State Machine, written in PHP. It can manage any Stateful object by defining states and transitions between these states.

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

Features

  • Managing State/Transition graph for an object
  • Defining and retrieving properties for states
  • Event Listenable transitions
  • Symfony2 integration
  • Custom state graph loaders
  • Twig Extension

Documentation

Documentation for master (1.1)

Getting started

Installation (via composer)

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

Version note :

If your are using this library in a Symfony project, 1.1 version is only compatible with Symfony >=2.6.
1.0 is compatible with Symfony >=2.3, <2.6.

Define your Stateful Object

Your stateful object just need to implement the StatefulInterface Interface.

use Finite\StatefulInterface;

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

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

Initializing a simple StateMachine

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

Main metrics

Overview
Name With Owneryohang/Finite
Primary LanguagePHP
Program languagePHP (Language Count: 4)
Platform
License:MIT License
所有者活动
Created At2012-09-27 21:26:13
Pushed At2025-02-25 17:25:04
Last Commit At
Release Count21
Last Release Name1.3.6 (Posted on 2025-01-08 16:20:10)
First Release Name1.0.0-BETA1 (Posted on )
用户参与
Stargazers Count1.3k
Watchers Count52
Fork Count188
Commits Count265
Has Issues Enabled
Issues Count70
Issue Open Count0
Pull Requests Count51
Pull Requests Open Count1
Pull Requests Close Count49
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private