gollumsf/enum

An implementation of enum for PHP. Java like type

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

This package is auto-updated.

Last update: 2024-04-19 13:00:39 UTC


README

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

Coverage License Latest Stable Version Latest Unstable Version Discord

Simple classe, trait and interface for implement enum in PHP

Installation:

composer require gollumsf/enum

Usages:

Basic:

<?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

Add translate key on enum value:

<?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

Without extends or extends other class:

<?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';
}

Custom translated callback

<?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"
// }