-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.php
52 lines (41 loc) · 1.63 KB
/
example.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
use ByJG\StateMachine\FiniteStateMachine;
use ByJG\StateMachine\State;
use ByJG\StateMachine\Transition;
require "vendor/autoload.php";
$stA = new State("A");
$stB = new State("B");
$stC = new State("C");
$stD = new State("D");
$transitionA_B = new Transition($stA, $stB);
$transitionA_C = new Transition($stA, $stC);
$transitionB_D = new Transition($stB, $stD, function($data) {
return !is_null($data);
});
$stateMachine = FiniteStateMachine::createMachine()
// ->throwErrorIfCannotTransition()
->addTransition($transitionA_B)
->addTransition($transitionA_C)
->addTransition($transitionB_D);
echo "Initial and Final States\n";
var_dump($stateMachine->isInitialState($stA));
var_dump($stateMachine->isInitialState($stB));
var_dump($stateMachine->isInitialState($stC));
var_dump($stateMachine->isInitialState($stD));
var_dump($stateMachine->isFinalState($stA));
var_dump($stateMachine->isFinalState($stB));
var_dump($stateMachine->isFinalState($stC));
var_dump($stateMachine->isFinalState($stD));
echo "Transitions\n";
var_dump($stateMachine->canTransition($stA, $stB));
var_dump($stateMachine->canTransition($stA, $stC));
var_dump($stateMachine->canTransition($stA, $stD));
var_dump($stateMachine->canTransition($stB, $stA));
var_dump($stateMachine->canTransition($stB, $stD));
var_dump($stateMachine->canTransition($stB, $stD, ["some_info"]));
var_dump($stateMachine->canTransition($stC, $stD));
echo "Possible States\n";
var_dump($stateMachine->possibleTransitions($stA));
var_dump($stateMachine->possibleTransitions($stB));
var_dump($stateMachine->possibleTransitions($stC));
var_dump($stateMachine->possibleTransitions($stD));