Initial commit

This commit is contained in:
Christopher Vagnetoft
2026-01-07 01:24:40 +01:00
commit 3d276060ec
14 changed files with 2258 additions and 0 deletions

24
examples/state.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
require_once __DIR__."/../vendor/autoload.php";
use NoccyLabs\StateMachine\StateTrait;
use NoccyLabs\StateMachine\Attributes\ValidTransitions;
enum OrderState {
use StateTrait;
#[ValidTransitions([OrderState::PROCESSING])]
case PENDING;
#[ValidTransitions([OrderState::PROCESSED,OrderState::PENDING])]
case PROCESSING;
#[ValidTransitions([OrderState::SHIPPED])]
case PROCESSED;
#[NoValidTransitions]
case SHIPPED;
}
$os = OrderState::PENDING;
var_dump($os->canTransitionTo(OrderState::PROCESSING));
var_dump($os->canTransitionTo(OrderState::PROCESSED));

53
examples/statemachine.php Normal file
View File

@@ -0,0 +1,53 @@
<?php
require_once __DIR__."/../vendor/autoload.php";
use NoccyLabs\StateMachine\StateTrait;
use NoccyLabs\StateMachine\StateMachineTrait;
use NoccyLabs\StateMachine\Attributes\ValidTransitions;
enum OrderStatus {
use StateTrait;
#[ValidTransitions([OrderStatus::PROCESSING])]
case PENDING;
#[ValidTransitions([OrderStatus::PROCESSED,OrderStatus::PENDING])]
case PROCESSING;
#[ValidTransitions([OrderStatus::SHIPPED])]
case PROCESSED;
#[NoValidTransitions]
case SHIPPED;
}
class Order {
use StateMachineTrait;
public function __construct(
private OrderStatus $status
)
{
}
public function setStatus(OrderStatus $status): self
{
if (!$this->isValidTransition($this->status, $status)) {
throw new \RuntimeException("Invalid transition");
}
$this->status = $status;
return $this;
}
public function getStatus(): OrderStatus
{
return $this->status;
}
}
$os = new Order(OrderStatus::PENDING);
var_dump($os->getStatus());
try {
$os->setStatus(OrderStatus::PROCESSED);
} catch (\Exception|InvalidTransitionException $e) {
}
var_dump($os->getStatus());
$os->setStatus(OrderStatus::PROCESSING);
var_dump($os->getStatus());