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());