trehinos/thor-option

适用于 PHP 8.1 及以上版本的选项类型。

v1.0.2 2024-02-27 08:53 UTC

This package is auto-updated.

Last update: 2024-09-28 13:35:37 UTC


README

此软件包允许您在 PHP 中使用选项类型(Thor\Maybe\Option)来处理值可能或可能不存在的情况。

此模块的 API 严重受到 Rust 的 Option 类型 的启发。

告别 null

使用 Thor\Maybe\Option,您可以将任何值(包括 null)包裹起来,而永远不会得到一个 null

示例

玩转一些数据

use Thor\Maybe\Option;
use Thor\Maybe\Maybe;

$myOption = Option::from("data...");
// Or
$myOption = Option::some("data...");

if ($myOption->isNone()) {
    // Never
}
// Or
if ($myOption->isA(Maybe::NONE)) {
    // Never
}

// Unwrap the optional value
if ($myOption->is() === Maybe::SOME) {
    // Here we know we can unwrap().
    $myString = $myOption->unwrap();
}

// Echoes the string if it is not none, or an empty string if it is :
echo $myOption->matches(
    fn(string $str) => $str,
    fn() => '',
);
// Or
echo $myOption->unwrapOr('');

处理 NONE

use Thor\Maybe\Option;

$myOption = Option::from(null);
$myOption = Option::none();

$value = $myOption->unwrap(); // Throws a RuntimeException
$value = $myOption->unwrapOrThrow(new Exception("Custom Exception"));
$value = $myOption->unwrapOrElse(fn() => 'default value from callable');
$value = $myOption->unwrapOr('default value');

参考

Maybe 枚举

  • Case SOME 表示选项包含某个值的情况,
  • Case NONE 表示选项中没有值。

Option

构造函数

  • Option::from(mixed $value) : 如果 $value 为 null,则创建一个没有值的选项,否则创建一个包含一些值的选项,
  • Option::some(mixed $value) : 创建一个包含一些值的选项,
  • Option::none() : 创建一个没有值的选项。

信息方法

  • $myOption->is() : 返回 Maybe::SOMEMaybe::NONE
  • $myOption->isNone() : 如果选项没有值则返回 true
  • $myOption->isSome() : 如果选项有值则返回 true
  • $myOption->isA(Maybe $maybe) : 如果选项对应于 $maybe 情况则返回 true

匹配

如果 Option 包含值,则执行一些操作,如果值不存在,则执行其他操作。

use Thor\Maybe\Option;
use Thor\Maybe\Maybe;

$myOption = Option::some("data...");

$myOption->matches(
    fn(string $str) => "My Option is Some($str)",
    fn() => 'My Option is None...',
);

解包方法

  • $value = $myOption->unwrap() : 如果选项的值不存在,则抛出 RuntimeException,
  • $value = $myOption->unwrapOrThrow(new Exception("自定义异常")) : 如果选项的值不存在,则抛出指定的 Throwable
  • $value = $myOption->unwrapOrElse(fn() => '从可调用参数返回的默认值') : 如果选项的值不存在,则执行参数中的可调用函数并返回其返回值,
  • $value = $myOption->unwrapOr('默认值') : 如果选项的值不存在,则返回指定的值。

许可证

版权所有 2024 Sébastien GELDREICH

许可证 MIT