Skip to content

Repository files navigation

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 StatusLatest Stable VersionTotal DownloadsLicenseScrutinizer Code QualityCode CoverageSensioLabsInsight

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

Getting started

Installation (via composer)

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

Define your Stateful Object

Your stateful object just need to implement the StatefulInterface Interface.

useFinite\StatefulInterface;
class Document implements StatefulInterface
{
private$state;
publicfunctionsetFiniteState($state)
{
$this->state = $state;
}
publicfunctiongetFiniteState()
{
return$this->state;
}
}

Initializing a simple StateMachine

useFinite\StateMachine\StateMachine;
useFinite\State\State;
useFinite\State\StateInterface;
// $document = retrieve your stateful object$sm = newStateMachine();
// Define states$sm->addState(newState('s1', StateInterface::TYPE_INITIAL));
$sm->addState('s2');
$sm->addState('s3');
$sm->addState(newState('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');

About

A Simple PHP Finite State Machine

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages