gollumsf/enum

PHP的enum实现。类似Java的类型

v2.0.4 2022-05-19 08:38 UTC

This package is auto-updated.

Last update: 2024-09-19 13:51:37 UTC


README

Build Status Build Status Build Status Build Status Build Status Build Status

Coverage License Latest Stable Version Latest Unstable Version Discord

简单的类、特质和接口,用于在PHP中实现enum

安装

composer require gollumsf/enum

用法

基本

<?php
namespace App\MyNamespace;

use GollumSF\Enum\Enum;

class MyEnum extends Enum {
	CONST KEY_1 = 'value1';
	CONST KEY_2 = 'value2';
	CONST KEY_3 = 'value3';
	CONST KEY_4 = 'value4';
}

var_dump(MyEnum::getEnums());
// array(4) {
//   ["KEY_1"]=> string(6) "value1"
//   ["KEY_2"]=> string(6) "value2"
//   ["KEY_3"]=> string(6) "value3"
//   ["KEY_4"]=> string(6) "value4"
// }

var_dump(MyEnum::getKey());
// array(4) {
//   [0]=> string(4) "KEY_1"
//   [1]=> string(4) "KEY_2"
//   [2]=> string(4) "KEY_3"
//   [3]=> string(4) "KEY_4"
// }

var_dump(MyEnum::getValues());
// array(4) {
//   [0]=> string(6) "value1"
//   [1]=> string(6) "value2"
//   [2]=> string(6) "value3"
//   [3]=> string(6) "value4"
// }

var_dump(MyEnum::isValid('NO_VALUE'));
// bool(false)
var_dump(MyEnum::isValid(MyEnum::KEY_1));
// bool(true)

var_dump(MyEnum::isValidKey('NO_KEY'));
// bool(false)
var_dump(MyEnum::isValidKey('KEY_1'));
// bool(true)

var_dump(MyEnum::search('value1'));
// string(5) "KEY_1"
var_dump(MyEnum::search('NO_VALUE'));
// NULL

在enum值上添加翻译键

<?php
namespace App\MyNamespace;

use GollumSF\Enum\TranslatedEnum;

class MyEnum extends TranslatedEnum {
	CONST KEY_1 = 'value1';
	CONST KEY_2 = 'value2';
	CONST KEY_3 = 'value3';
	CONST KEY_4 = 'value4';
}

var_dump(MyEnum::getTranslatedEnums());
// array(4) {
//   ["KEY_1"]=> string(22) "app.my_namespace.key_1"
//   ["KEY_2"]=> string(22) "app.my_namespace.key_2"
//   ["KEY_3"]=> string(22) "app.my_namespace.key_3"
//   ["KEY_4"]=> string(22) "app.my_namespace.key_4"
// }

var_dump(MyEnum::getTranslatedValue());
// array(4) {
//   [0] => string(22) "app.my_namespace.key_1"
//   [1] => string(22) "app.my_namespace.key_2"
//   [2] => string(22) "app.my_namespace.key_3"
//   [3] => string(22) "app.my_namespace.key_4"
// }


var_dump(MyEnum::isTranslatedValid('NO_VALUE'));
// bool(false)
var_dump(MyEnum::isTranslatedValid('app.my_namespace.key_1'));
// bool(true)


var_dump(MyEnum::translatedSearch('app.my_namespace.key_1'));
// string(5) "KEY_1"
var_dump(MyEnum::translatedSearch('NO_VALUE'));
// NULL

不扩展或扩展其他类

<?php
namespace App\MyNamespace;

use GollumSF\Enum\EnumInterface;
use GollumSF\Enum\EnumTrait;
use GollumSF\Enum\TranslatedEnumInterface;
use GollumSF\Enum\TranslatedEnumTrait;

class MyEnum extends OtherClass implements EnumInterface {
	
	use EnumTrait;
	
	CONST KEY_1 = 'value1';
	CONST KEY_2 = 'value2';
	CONST KEY_3 = 'value3';
	CONST KEY_4 = 'value4';
}

class MyTranslatedEnum extends OtherClass implements TranslatedEnumInterface {
	
	use TranslatedEnumTrait;
	
	CONST KEY_1 = 'value1';
	CONST KEY_2 = 'value2';
	CONST KEY_3 = 'value3';
	CONST KEY_4 = 'value4';
}

自定义翻译回调

<?php
namespace App\MyNamespace;

use GollumSF\Enum\TranslatedEnum;

class MyEnum extends TranslatedEnum {
	CONST KEY_1 = 'value1';
	CONST KEY_2 = 'value2';
	CONST KEY_3 = 'value3';
	CONST KEY_4 = 'value4';
}

TranslatedEnum::setCallbackTranslatedValue(function ($className, $key, $value) {
    return $className.'.'.$key.'.'.$value;
});

var_dump(MyEnum::getTranslatedEnums());
// array(4) {
//   ["KEY_1"]=> string(35) "App\MyNamespace\MyEnum.KEY_1.value1"
//   ["KEY_2"]=> string(35) "App\MyNamespace\MyEnum.KEY_2.value2"
//   ["KEY_3"]=> string(35) "App\MyNamespace\MyEnum.KEY_3.value3"
//   ["KEY_4"]=> string(35) "App\MyNamespace\MyEnum.KEY_4.value4"
// }