此包已被废弃,不再维护。作者建议使用 PHP8.1 枚举实现 包。

选择不同枚举实现的方案

v2.1.0 2022-11-04 12:04 UTC

This package is auto-updated.

Last update: 2022-11-04 12:08:00 UTC


README

选择不同枚举实现的方案

Philiagus\Enum\ConstantEnumTrait

ConstantEnumTrait 将类中可用的每个常量视为有效的枚举值。只需将其作为特质在您想用作枚举的类中使用。该特质提供了多种方法

  • enumAll(): array

    以数组形式列出类中的所有枚举。键是常量名称,值是枚举的值。

  • enumHas($value): bool

    如果提供的值与该类中某个常量的值相同,则返回 true

  • enumAssert($value): void

    断言提供的值与该类中某个常量的值相同。如果提供的值无效,则抛出 Philiagus\Enum\Exception\InvalidEnumException

  • enumAssertArray(array $values): void

    断言数组中的每个元素都是有效的枚举,如果存在无效值,则抛出 Philiagus\Enum\Exception\ValuesNotInEnumException

Philiagus\Enum\PublicConstantEnumTrait

Philiagus\Enum\ConstantEnumTrait 完全相同,但只将公共常量视为有效值。

Philiagus\Enum\CommentEnum

此实现提供了枚举,这些枚举是提供枚举的类的实现,因此我们谈论的是具有类型提示等所有优势的真正对象。

<?php

/**
 * @method static SomeEnum VALUE_ONE
 * @method static SomeEnum VALUE_TWO
 */
class SomeEnum extends \Philiagus\Enum\CommentEnum
{
}

$anEnumValue = SomeEnum::VALUE_ONE();

function doSomething(SomeEnum $value): void
{
    switch ($value) { // objects work with switch construct
        case SomeEnum::VALUE_ONE():
            echo 'ONE';
            break;
        case SomeEnum::VALUE_TWO();
            echo 'TWO';
            break;
    }
}

doSomething($anEnumValue); // would print 'ONE'

var_dump(SomeEnum::all());
/*
Prints an array with the keys being the enum names (VALUE_OND and VALUE_TWO) and the values being the corresponding enum instances.
*/

此示例创建了一个具有有效枚举值 VALUE_ONEVALUE_TWO 的枚举类。稍后使用这些方法检索它们。

为什么是方法?

答案:这些可以被IDE提示,并且大多数IDE可以找到它们的用法。

我能否向类中添加自己的方法?

是的!使用此方法,您可以添加功能或更多信息到您的枚举中。