phpOMS/Stdlib/Base/EnumArray.php
2022-11-09 22:55:39 +01:00

127 lines
2.4 KiB
PHP
Executable File

<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package phpOMS\Stdlib\Base
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://karaka.app
*/
declare(strict_types=1);
namespace phpOMS\Stdlib\Base;
/**
* Enum class.
*
* Replacing the SplEnum class and providing basic enum.
*
* @package phpOMS\Stdlib\Base
* @license OMS License 1.0
* @link https://karaka.app
* @since 1.0.0
*/
abstract class EnumArray
{
/**
* Constants.
*
* @var array
* @since 1.0.0
*/
protected static array $constants = [];
/**
* Checking enum name.
*
* Checking if a certain const name exists (case sensitive)
*
* @param string $name Name of the value (case sensitive)
*
* @return bool
*
* @since 1.0.0
*/
public static function isValidName(string $name) : bool
{
return isset(static::$constants[$name]);
}
/**
* Getting all constants of this enum.
*
* @return array
*
* @since 1.0.0
*/
public static function getConstants() : array
{
return static::$constants;
}
/**
* Check enum value.
*
* Checking if a given value is part of this enum
*
* @param mixed $value Value to check
*
* @return bool
*
* @since 1.0.0
*/
public static function isValidValue(mixed $value) : bool
{
return \in_array($value, static::$constants, true);
}
/**
* Get enum value by name.
*
* @param mixed $key Key to look for
*
* @return mixed
*
* @throws \Exception
*
* @since 1.0.0
*/
public static function get(mixed $key) : mixed
{
if (!isset(static::$constants[$key])) {
throw new \OutOfBoundsException('Key "' . $key . '" is not valid.');
}
return static::$constants[$key];
}
/**
* Count enum variables
*
* @return int
*
* @since 1.0.0
*/
public static function count() : int
{
return \count(static::$constants);
}
/**
* Get random enum value.
*
* @return mixed
*
* @since 1.0.0
*/
public static function getRandom() : mixed
{
$keys = \array_keys(static::$constants);
return static::$constants[$keys[\mt_rand(0, \count(static::$constants) - 1)]];
}
}