Files
zimoyin 4c841b9dbf init
2026-04-02 17:42:00 +08:00

86 lines
1.8 KiB
PHP

<?php
namespace plugin\admin\app\common;
class RunCatching
{
private mixed $value;
private ?\Throwable $throwable;
// 私有构造,只能通过内部创建
private function __construct(mixed $value = null, ?\Throwable $throwable = null)
{
$this->value = $value;
$this->throwable = $throwable;
}
// 构建成功结果
public static function success(mixed $value): self
{
return new self($value, null);
}
// 构建失败结果
public static function failure(\Throwable $e): self
{
return new self(null, $e);
}
// 是否成功
public function isSuccess(): bool
{
return $this->throwable === null;
}
// 是否失败
public function isFailure(): bool
{
return !$this->isSuccess();
}
// 获取结果,失败则抛出异常
public function get(): mixed
{
if ($this->isFailure()) {
throw $this->throwable;
}
return $this->value;
}
// 获取结果,失败返回 null
public function getOrNull(): mixed
{
return $this->isSuccess() ? $this->value : null;
}
// 获取结果,失败返回默认值
public function getOrDefault(mixed $default): mixed
{
return $this->isSuccess() ? $this->value : $default;
}
// 成功时执行
public function onSuccess(callable $action): self
{
if ($this->isSuccess()) {
$action($this->value);
}
return $this;
}
// 失败时执行
public function onFailure(callable $action): self
{
if ($this->isFailure()) {
$action($this->throwable);
}
return $this;
}
// 获取异常
public function exception(): ?\Throwable
{
return $this->throwable;
}
}