jgswift / kenum
PHP 5.5+ 枚举模式实现
0.1.1
2014-09-11 02:48 UTC
Requires
- php: >=5.5
- jgswift/qtil: 0.1.*
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-28 15:39:22 UTC
README
PHP 5.5+ 枚举模式实现
描述
Kenum 是一个简单的组件,用于使用常量提供枚举行为。
本包包括传统的枚举和位操作枚举。
安装
使用 composer 通过命令行安装
php composer.phar require jgswift/kenum:0.1.*
使用 composer 通过 composer.json 安装
{ "require": { "jgswift/kenum": "0.1.*" } }
依赖
- php 5.5+
使用
默认基类
以下是一个基于 Kenum 的最小示例
<?php class MyEnum extends kenum\Enum\Base { const Option1 = 'Option1'; const Option2 = 'Option2'; } $enum = new MyEnum(MyEnum::Option2); // get current enum value with the value method or through string conversion $value = $enum->value() // Returns 'Option1' $string = (string)$enum; // Returns 'Option1' // check for equality $equals = $enum->equals(MyEnum::Option2); // returns true $equals = $enum->equals(new MyEnum(MyEnum::Option1)); // returns false
位操作
使用位标志作为值的位操作实现。位标志可以组合,允许一次设置多个标志。常量 必须 是2的倍数。一个示例集合可以是 1, 2, 4, 8, 16, 32 等。
<?php class MyEnum extends kenum\Enum\Bitwise { const Option1 = 1; const Option2 = 2; const Option3 = 4; /* etc... */ } $enum = new MyEnum(MyEnum::Option2 | MyEnum::Option3); // get current enum value with the value method or through string conversion var_dump($enum->value()); // Returns '6' var_dump((string)$enum); // Returns 'Option2 Option3' // check for equality var_dump($enum->equals(MyEnum::Option2)); // returns false var_dump($enum->equals(MyEnum::Option2 | MyEnum::Option3)); // returns true // check for flag var_dump($enum->hasFlag(MyEnum::Option2)); // returns true var_dump($enum->hasFlag(MyEnum::Option1)); // returns false
常量标量表达式
从 PHP 5.6 开始,可以使用表达式来定义常量,这在概念上简化了它们,并且消除了手动硬编码每个值的需要。
class MyEnum extends kenum\Enum\Bitwise { const Option1 = 1; const Option2 = self::Option1 * 2; // 2 const Option3 = self::Option2 * 2; // 4 const Option4 = self::Option4 * 2; // 8 /* etc... */ }
自定义枚举
使用枚举特性实现自定义枚举相对简单
class MyEnum { use kenum\Enum; function __construct($value) { /* store value(s) */ } // custom equality check function equals($value) { /* check for equality */ } function __toString() { /* transform enum value(s) into human-readable text */ } }