20250524
- Добавлено перечисление VarNotBoolAction, для определения действий в классе BoolExtensions (методы AnyTrue и TrueCount), если передана часть не булевого типа. - В расширении BoolExtensions в методах AnyTrue и TrueCount убрано выброс исключение, если какой-то аргумент из массива expressions не является булевым типом. Вместо него в обоих методах введён необязательный параметр $ifNotBool (тип VarNotBoolAction), который определяет действие: игнорирование (этот аргумент просто исключается из проверки), считать правдивым (вместо него ставится true) и считать ложным (вместо него ставится false).
This commit is contained in:
		
							
								
								
									
										34
									
								
								sources/enums/VarNotBoolAction.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								sources/enums/VarNotBoolAction.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| <?php | ||||
|  | ||||
| namespace goodboyalex\php_components_pack\enums; | ||||
|  | ||||
| use goodboyalex\php_components_pack\traits\EnumExtensionsTrait; | ||||
|  | ||||
| /** | ||||
|  * Перечисление типов действий, которые необходимо выполнить, если переменная не является булевым типом. | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @since 1.0.19 | ||||
|  */ | ||||
| enum VarNotBoolAction: int | ||||
| { | ||||
|     // Подключаю расширение для Enum | ||||
|     use EnumExtensionsTrait; | ||||
|  | ||||
|     /** | ||||
|      * Игнорировать это утверждение. | ||||
|      */ | ||||
|     case Ignore = 0; | ||||
|  | ||||
|     /** | ||||
|      * Считать это утверждение истинным. | ||||
|      */ | ||||
|     case ConsiderItTrue = 1; | ||||
|  | ||||
|     /** | ||||
|      * Считать это утверждение ложным. | ||||
|      */ | ||||
|     case ConsiderItFalse = 2; | ||||
| } | ||||
| @@ -2,14 +2,14 @@ | ||||
|  | ||||
| namespace goodboyalex\php_components_pack\extensions; | ||||
|  | ||||
| use Exception; | ||||
| use goodboyalex\php_components_pack\enums\VarNotBoolAction; | ||||
|  | ||||
| /** | ||||
|  * Расширение типа "правда/ложь". | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @version 1.1 | ||||
|  * @since 1.0.7 | ||||
|  */ | ||||
| final class BoolExtensions | ||||
| @@ -34,38 +34,55 @@ final class BoolExtensions | ||||
|      * <code>true</code>. | ||||
|      * | ||||
|      * @param array $expressions Переменные формата правда/ложь. | ||||
|      * @param VarNotBoolAction $ifNotBool Действие, если какой-то аргумент <code>expressions</code> не является булевым | ||||
|      *      типом. По умолчанию игнорировать. | ||||
|      * | ||||
|      * @return bool Есть ли хотя бы одно в значении true. | ||||
|      * | ||||
|      * @throws Exception Выбрасывается, если хотя бы один аргумент <code>expressions</code> не являются типом | ||||
|      *     правда/ложь. | ||||
|      */ | ||||
|     public static function AnyTrue (array $expressions): bool | ||||
|     public static function AnyTrue (array $expressions, VarNotBoolAction $ifNotBool = VarNotBoolAction::Ignore): bool | ||||
|     { | ||||
|         return self::TrueCount($expressions) > 0; | ||||
|         return self::TrueCount($expressions, $ifNotBool) > 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Вычисляет количество переменных формата правда/ложь <code>expressions</code> в значении <code>true</code>. | ||||
|      * | ||||
|      * @param array $expressions Переменные формата правда/ложь. | ||||
|      * @param VarNotBoolAction $ifNotBool Действие, если какой-то аргумент <code>expressions</code> не является булевым | ||||
|      *     типом. По умолчанию игнорировать. | ||||
|      * | ||||
|      * @return int Количество переменных в значении true. | ||||
|      * | ||||
|      * @throws Exception Выбрасывается, если хотя бы один аргумент <code>expressions</code> не являются типом | ||||
|      *     правда/ложь. | ||||
|      */ | ||||
|     public static function TrueCount (array $expressions): int | ||||
|     public static function TrueCount (array $expressions, VarNotBoolAction $ifNotBool = VarNotBoolAction::Ignore): int | ||||
|     { | ||||
|         // Проверяем все аргументы | ||||
|         // Создаем пустой массив для хранения проверяемых аргументов | ||||
|         $checkArray = []; | ||||
|  | ||||
|         // Проверяем все входящие аргументы | ||||
|         foreach ($expressions as $expression) | ||||
|             // - если аргумент не является типом правда/ложь | ||||
|             if (!is_bool($expression)) | ||||
|                 // -- то выбрасываем исключение | ||||
|                 throw new Exception('All arguments must be bool. / Все аргументы должны быть типа «правда/ложь».'); | ||||
|                 // -- то делаем следующее в зависимости от настроек: | ||||
|                 switch ($ifNotBool) { | ||||
|                     case VarNotBoolAction::Ignore: | ||||
|                         // --- игнорируем аргумент | ||||
|                         break; | ||||
|                     case VarNotBoolAction::ConsiderItTrue: | ||||
|                         // --- считаем аргумент как истинное значение | ||||
|                         $checkArray[] = true; | ||||
|                         break; | ||||
|                     case VarNotBoolAction::ConsiderItFalse: | ||||
|                         // --- считаем аргумент как ложное значение | ||||
|                         $checkArray[] = false; | ||||
|                         break; | ||||
|                 } | ||||
|             else | ||||
|                 // - иначе добавляем аргумент в массив проверяемых аргументов | ||||
|                 $checkArray[] = $expression; | ||||
|  | ||||
|         // Используем array_filter для фильтрации всех истинных значений | ||||
|         $filtered = array_filter($expressions); | ||||
|         $filtered = array_filter($checkArray, fn ($value) => $value === true); | ||||
|  | ||||
|         // Возвращаем количество элементов в отфильтрованном массиве | ||||
|         return count($filtered); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user