xakepehok/enum-helper

枚举辅助工具,包含switch-case替代方案等更多功能

0.1.2 2022-07-06 17:50 UTC

This package is auto-updated.

Last update: 2024-09-06 23:01:48 UTC


README

\XAKEPEHOK\EnumHelper\EnumHelper - 辅助工具,可以帮助您使用枚举值(值对象),提供一些有用的函数,例如switch-case、保护无效值、获取所有值或不要忘记将所有枚举值用作某些数组键

用法

定义您的枚举类,例如,定义值对象类 Status(值对象不是必需的,您不能定义构造函数和getter,并可以将您的类用作简单的辅助工具,但在很多情况下非常有用)

<?php

class Status extends \XAKEPEHOK\EnumHelper\EnumHelper
{
    
    const STATUS_PROCESSING = 'processing';
    const STATUS_APPROVED = 'approved';
    const STATUS_CANCELED = 'canceled';

    private $status;

    public function __construct($status) 
    {
        self::guardValidValue($status);
        $this->status = $status;
    }

    public  function getStatus()
    {
        return $this->status;
    }
    
    public static function values() : array{
        return [
            self::STATUS_PROCESSING,
            self::STATUS_APPROVED,
            self::STATUS_CANCELED,
        ];
    }    
}

之后,您可以使用您的 Status 对象作为您的领域类型。但这个辅助工具提供更多功能。

switch case

您可能很容易忘记在原生PHP switch-case中使用您的一个状态。我们的辅助工具提供替代的switch-case方法

<?php
$statusValue = Status::STATUS_PROCESSING;

$result = Status::switchCase($statusValue, [
    Status::STATUS_PROCESSING => function ($case) {
        //doSomethins();
        return null; //
    },
    Status::STATUS_APPROVED => function ($case) {
        return true;
    },
    Status::STATUS_CANCELED => false,
]);

在这个函数中,您应该提供所有您的枚举值作为键(如果您忘记了某些内容,将抛出异常 \XAKEPEHOK\EnumHelper\Exception\ForgottenSwitchCaseException),并使用值或可调用作为结果。有关更多详细信息,请参阅 EnumHelper 代码

关联

可以帮助您定义具有枚举作为数组键的关联数组。如果您忘记了某些内容,将抛出异常 \XAKEPEHOK\EnumHelper\Exception\NotEqualsAssociationException`

<?php
$array = Status::associative([
    Status::STATUS_PROCESSING => 0,
    Status::STATUS_APPROVED => 1,
    Status::STATUS_CANCELED => -1,
]);

是否有效

<?php
Status::isVlaid(Status::STATUS_PROCESSING); //true
Status::isVlaid('qwerty'); //false

保护有效值

如果传递的值不是枚举值,则抛出异常 \XAKEPEHOK\EnumHelper\Exception\OutOfEnumException

<?php
Status::guardValidValue(Status::STATUS_PROCESSING); //OK
Status::guardValidValue('qwerty'); //throw exception