fpoirotte / enum-trait
使用 traits 的 PHP 枚举类型
v0.1.4
2017-06-11 22:43 UTC
Requires
- php: >=5.4
- ext-reflection: *
Requires (Dev)
README
此组件为 PHP 提供实际的枚举类型。
安装
此组件依赖于 Composer 进行安装。
要在项目中使用 Enum Trait,只需添加对包的要求
$ php composer.php require fpoirotte/enum-trait
使用
使用以下片段来声明一个新的枚举
<?php use \fpoirotte\EnumTrait; final class FavoriteColor implements Serializable { use EnumTrait; private $RED; private $BLUE; private $GREEN; } $red = FavoriteColor::RED(); $red2 = FavoriteColor::RED(); $red3 = unserialize(serialize($red)); $red4 = clone $red; $blue = FavoriteColor::BLUE(); // Compare two distinct values var_dump($red == $blue); // False // Compare various instances of the same value var_dump($red == $red2); // True var_dump($red == $red3); // True var_dump($red == $red4); // True // Get the enum's value name var_dump((string) $red); // "RED" ?>
目标
此组件旨在实现以下目标
定义枚举的真正类型,以便它们可以作为类型提示使用
<?php function displayUsingFavoriteColor(FavoriteColor $color, $message) { // ... } ?>
使扩展现有枚举以添加新值成为可能。这通过类继承变得非常简单。通过
final
关键字防止扩展也很容易。消除实际值的需求。本质上,标签本身就应该足以确定特定枚举实例的含义。这也避免了重复。
说再见吧以下惯例
<?php class MyEnum extends SomeInferiorEnum { const VALUE1 = 'value1'; } ?>
将枚举值转换为不透明值。这实际上是上一个目标的结果。
这阻止了开发人员直接使用值,例如
if ($enumValue == 1) { /* ... */ }
,这反过来又防止了底层值/类型演变时的细微错误。使直接比较枚举值成为可能,而无需辅助方法。请参见 使用 的示例。
使轻松序列化/反序列化枚举成为可能(无需要求一些辅助函数)。
使复制(克隆)枚举值成为可能,而无需特定的支持函数。
不对附加 PHP 扩展(例如
SplTypes
)提出要求。
贡献
要贡献补丁
许可
本项目采用 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。