Description
Finite is a Simple State Machine, written in PHP. It can manage any Stateful object by defining states and transitions between these states.
Finite alternatives and similar libraries
Based on the "Architectural" category.
Alternatively, view Finite alternatives based on common mentions on social networks and blogs.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Finite or a related project?
README
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.
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');
*Note that all licence references and agreements mentioned in the Finite README section above
are relevant to that project's source code only.