Skip to content

phpmentors-jp/stagehand-fsm

Repository files navigation

Stagehand_FSM

A finite state machine

Total Downloads Latest Stable Version Latest Unstable Version Build Status

Stagehand_FSM is a finite state machine.

Manual state management makes code complex, decreases intentionality. By using Stagehand_FSM, state management code can be declaratively represented in the form of FSM. This makes code simpler, increases intentionality.

Stagehand_FSM can be used as an infrastructure for domain-specific languages (DSLs). Examples are workflow engines such as Workflower, pageflow engines such as PHPMentorsPageflowerBundle.

<?php
use Stagehand\FSM\StateMachine\StateMachineBuilder;

$stateMachineBuilder = new StateMachineBuilder();
$stateMachineBuilder->addState('locked');
$stateMachineBuilder->addState('unlocked');
$stateMachineBuilder->setStartState('locked');
$stateMachineBuilder->addTransition('locked', 'insertCoin', 'unlocked');
$stateMachineBuilder->addTransition('unlocked', 'pass', 'locked');
$stateMachine = $stateMachineBuilder->getStateMachine();

$stateMachine->start();
echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "locked"
$stateMachine->triggerEvent('insertCoin');
echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "unlocked"
$stateMachine->triggerEvent('pass');
echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "locked"

Features

  • Activities (do actions)
  • Entry actions
  • Exit actions
  • Transition actions
  • Transition logging
  • Guards
  • Initial pseudo state
  • Final state
  • User-defined payload
  • User-defined event dispatcher for the state machine events

Installation

Stagehand_FSM can be installed using Composer.

Add the dependency to piece/stagehand-fsm into your composer.json file as the following:

Stable version:

composer require piece/stagehand-fsm "2.6.*"

Development version:

composer require phpmentors/stagehand-fsm "~3.0@dev"

Support

If you find a bug or have a question, or want to request a feature, create an issue or pull request for it on Issues.

Copyright

Copyright (c) 2006-2008, 2011-2018 KUBO Atsuhiro, All rights reserved.

License

The BSD 2-Clause License