1. Go to this page and download the library: Download zinovyev/php-fsm library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
zinovyev / php-fsm example snippets
class StateA extends State
{
public function foo($name)
{
printf("Hello, %s!", $name);
}
}
class StateMachine extends Client
{
public function __construct()
{
parent::__construct();
/* ... */
$this
->addState($stateA)
/* ... */
->createTransition('fourth', 'stateA', 'stateB')
/* ... */
$stateMachine = new StateMachine();
$stateMachine->applyMemento($memento);
FSM\Client;
use FSM\State\State;
use FSM\State\StateInterface;
/**
* StateA class
*/
class StateA extends State
{
public function foo($f)
{
return $f;
}
}
/**
* StateB class
*/
class StateB extends State
{
public function bar($b)
{
return $b * 2;
}
}
/**
* StateC class
*/
class StateC extends State
{
public function fooBar($fb)
{
return strrev($fb);
}
public function shuffle(array $array) {
shuffle($array);
return $array;
}
}
/**
* StateMachine example class
*/
class StateMachine extends Client
{
public function __construct()
{
parent::__construct();
// Create StateA initial type instance of class StateA
$stateA = new StateA();
$stateA->setName('stateA');
$stateA->setType(StateInterface::TYPE_INITIAL);
// Create StateB finite type instance of class StateB
$stateB = new StateB();
$stateB->setName('stateB');
$stateB->setType(StateInterface::TYPE_FINITE);
// Create StateC regular type instance of class StateC
$stateC = new StateC();
$stateC->setName('stateC');
$stateC->setType(StateInterface::TYPE_REGULAR);
// Create StateD regular type instance of class StateB
$stateD = new StateB();
$stateD->setName('stateD');
$stateD->setType(StateInterface::TYPE_REGULAR);
// Attach states and transitions
$this
->addState($stateA)
->addState($stateB)
->addState($stateC)
->addState($stateD)
->setInitialState($stateA)
->createTransition('initial', 'stateA', 'stateA')
->createTransition('second', 'stateA', 'stateC')
->createTransition('secondAlternative', 'stateA', 'stateD')
->createTransition('third', 'stateC', 'stateD')
->createTransition('thirdAlternative', 'stateD', 'stateC')
->createTransition('fourth', 'stateD', 'stateB')
->createTransition('fourthAlternative', 'stateC', 'stateB')
->createTransition('shortWay', 'stateA', 'stateB')
;
}
}
// Create new StateMachine instance
$stateMachine = new StateMachine();
$stateMachine->foo = 'bar'; // Add public property
// Test StateA state
printf("%d) State machine is at state: '%s'. Test function call result is: '%s'\n", 1,
$stateMachine->getCurrentState()->getName(), // Get State Name
$stateMachine->callAction('foo', $properties = [100]) // Call State function
);
// Accept transition "initial"
$stateMachine->acceptTransitionByName('initial');
printf("%d) State machine is at SAME state: '%s'. Test function call result: '%s'\n", 2,
$stateMachine->getCurrentState()->getName(), // Get State Name
$stateMachine->callAction('foo', $properties = [200]) // Call State function
);
// Accept transition "second"
$stateMachine->acceptTransitionByName('second');
printf("%d) State machine is at state: '%s'. Test function call result: '%s'\n", 3,
$stateMachine->getCurrentState()->getName(), // Get State Name
$stateMachine->fooBar('foo bar') // Call State function
);
// Create a memento (snapshot) of the current state
$memento = $stateMachine->createMemento();
// Unset StateMachine
$stateMachine = null;
unset($stateMachine);
// Restore StateMachine from a snapshot (Memento)
$stateMachine = new StateMachine();
$stateMachine->applyMemento($memento);
printf("=*= Check property value after restore: \$foo='%s' =*=\n", $stateMachine->foo);
// Accept transition "third"
$stateMachine->acceptTransitionByName('third');
printf("%d) State machine is at state '%s'. Test function call result: '%s'\n", 4,
$stateMachine->getCurrentState()->getName(), // Get State Name
$stateMachine->bar(1) // Call State function
);
// Accept transition "fourth"
$stateMachine->acceptTransitionByName('fourth');
printf("%d) State machine is at state '%s'. Test function call result: '%s'\n", 5,
$stateMachine->getCurrentState()->getName(), // Get State Name
$stateMachine->bar(2) // Call State function
);
json
""zinovyev/php-fsm": "0.6.5"
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.