20250203
This commit is contained in:
		
							
								
								
									
										80
									
								
								sources/traits/EnumExtensionsTrait.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								sources/traits/EnumExtensionsTrait.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user