<?php namespace goodboyalex\php_components_pack\traits; use goodboyalex\php_components_pack\enums\MessageType; use InvalidArgumentException; use ReflectionEnum; use ReflectionException; /** * Расширение перечислений. * * @author Александр Бабаев * @package php_components_pack * @version 1.0 * @since 1.0 */ trait EnumExtensionsTrait { /** * Получает значение перечисления по его имени. * * @param string $name Имя значения перечисления * * @return MessageType|EnumExtensionsTrait Перечисление */ public static function FromName (string $name): self { // Создаём экземпляр $reflection = new ReflectionEnum(static::class); // Проверяем, есть ли такая переменная if (!$reflection->hasCase($name)) // - если нет - ошибка throw new InvalidArgumentException(sprintf("Enumeration name '%s' does not exist!", $name)); try { $result = $reflection->getCase($name)->getValue(); } catch (ReflectionException) { $result = new static(); } return $result; } /** * Получает значение перечисления * * @return string Значение перечисления */ public function GetValue (): string { return $this->name; } /** * Конвертирует в перечисление из int. * * @param int $value Значение перечисления в формате int * * @return MessageType|EnumExtensionsTrait Объект * перечисления */ public static function FromInt (int $value): self { return self::tryFrom($value); } /** * Переводит тип в INT * * @return int Значение типа в INT */ public function ToInt (): int { return $this->value; } }