cawaphp / statemachine
此包已被弃用,且不再维护。未建议替代包。
Сáша 状态机
dev-master
2018-02-14 20:37 UTC
Requires
- php: ~7.1
- cawaphp/cawa: dev-master
- clue/graph: ^0.9.0
- graphp/graphviz: ^0.2.1
Requires (Dev)
- phpunit/phpunit: ~7.0
This package is not auto-updated.
Last update: 2023-12-23 16:01:12 UTC
README
警告
请注意,此包仍在积极开发中。可能会发生一些破坏性更改。感谢您的理解。
特性
- 状态 > 可以有 X 个转换 > 可以有 X 个条件
getPossibleTransitions()
根据当前状态返回可能的转换getGraph()
状态机图apply($state)
返回 true 或抛出详细异常apply($state, true)
返回 bool- 事件
- 状态更改前
- 状态更改后
基本用法
// Declare the state machine $stateMachine = new StateMachine("PENDING", new \stdClass()); $stateMachine->addState((new State("PENDING")) ->addTransition(new Transition("TOCONFIRM")) ->addTransition(new Transition("CONFIRMED")) ); $stateMachine->addState((new State("TOCONFIRM")) ->addTransition(new Transition("CONFIRMED")) ->addTransition(new Transition("CANCELED")) ); $returnTrue = new class extends Condition { public function __invoke($subject) : bool { return true; } }; $returnFalse = new class extends Condition { public function __invoke($subject) : bool { return false; } }; $stateMachine->addState((new State("READY")) ->addTransition((new Transition("CONFIRMED")) ->addCondition($returnFalse) ) ->addTransition((new Transition("PROCESSED")) ->addCondition($returnTrue) ) ->addTransition(new Transition("RETURN")) ); $stateMachine ->addState(new State("PROCESSED")) ->addState(new State("CANCELED")) ->addState(new State("RETURN")); // play with state var_dump($stateMachine->getCurrentState()->getName()); // string(7) "PENDING" $stateMachine->apply("TOCONFIRM"); var_dump($stateMachine->getCurrentState()->getName()); // string(9) "TOCONFIRM" var_dump($stateMachine->apply("RETURN", true)); // bool(false) var_dump($stateMachine->getLastException()); // object(Cawa\StateMachine\Exceptions\MissingTransition)#103 (7) { // ... // } var_dump($stateMachine->getPossibleTransitions()); // array(2) { // [0]=> // string(9) "CONFIRMED" // [1]=> // string(8) "CANCELED" // } var_dump($stateMachine->getGraph()); // string(369) "digraph G { // "PENDING" -> "TOCONFIRM" // "PENDING" -> "CONFIRMED" // "TOCONFIRM" -> "CONFIRMED" // "TOCONFIRM" -> "CANCELED" // "READY" -> "CONFIRMED" [label="if (class@anonymous/Test.php0x7fd8eb47c50a)"] // "READY" -> "PROCESSED" [label="if (class@anonymous/Test.php0x7fd8eb47c451)"] // "READY" -> "RETURN" // } // "
方法 getGraph()
此方法返回原始 GraphViz,您可以使用官方 dot 可执行文件(sudo apt-get install graphviz
)或使用 此网页界面
许可证
Cawa 在 GPL v3 许可证下发布 - 请参阅 LICENSE
文件以获取详细信息