- Добавлено перечисление VarNotBoolAction, для определения действий в классе BoolExtensions (методы AnyTrue и TrueCount), если передана часть не булевого типа. - В расширении BoolExtensions в методах AnyTrue и TrueCount убрано выброс исключение, если какой-то аргумент из массива expressions не является булевым типом. Вместо него в обоих методах введён необязательный параметр $ifNotBool (тип VarNotBoolAction), который определяет действие: игнорирование (этот аргумент просто исключается из проверки), считать правдивым (вместо него ставится true) и считать ложным (вместо него ставится false).
		
			
				
	
	
		
			90 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace goodboyalex\php_components_pack\extensions;
 | |
| 
 | |
| use goodboyalex\php_components_pack\enums\VarNotBoolAction;
 | |
| 
 | |
| /**
 | |
|  * Расширение типа "правда/ложь".
 | |
|  *
 | |
|  * @author Александр Бабаев
 | |
|  * @package php_components_pack
 | |
|  * @version 1.1
 | |
|  * @since 1.0.7
 | |
|  */
 | |
| final class BoolExtensions
 | |
| {
 | |
|     /**
 | |
|      * Вывод в строку <code>ifTrue</code>, если выражение <code>b</code> правдиво и <code>ifFalse</code> в противном
 | |
|      * случае.
 | |
|      *
 | |
|      * @param bool $b Выражение типа правда/ложь.
 | |
|      * @param string $ifTrue Строка для правдивого выражения. По умолчанию "true".
 | |
|      * @param string $ifFalse Строка для лживого выражения. По умолчанию "false".
 | |
|      *
 | |
|      * @return string Вывод строки.
 | |
|      */
 | |
|     public static function ExportToString (bool $b, string $ifTrue = "true", string $ifFalse = "false"): string
 | |
|     {
 | |
|         return $b ? $ifTrue : $ifFalse;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Вычисляет, есть ли хотя бы одно из переменных формата правда/ложь <code>expressions</code> в значении
 | |
|      * <code>true</code>.
 | |
|      *
 | |
|      * @param array $expressions Переменные формата правда/ложь.
 | |
|      * @param VarNotBoolAction $ifNotBool Действие, если какой-то аргумент <code>expressions</code> не является булевым
 | |
|      *      типом. По умолчанию игнорировать.
 | |
|      *
 | |
|      * @return bool Есть ли хотя бы одно в значении true.
 | |
|      *
 | |
|      */
 | |
|     public static function AnyTrue (array $expressions, VarNotBoolAction $ifNotBool = VarNotBoolAction::Ignore): bool
 | |
|     {
 | |
|         return self::TrueCount($expressions, $ifNotBool) > 0;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Вычисляет количество переменных формата правда/ложь <code>expressions</code> в значении <code>true</code>.
 | |
|      *
 | |
|      * @param array $expressions Переменные формата правда/ложь.
 | |
|      * @param VarNotBoolAction $ifNotBool Действие, если какой-то аргумент <code>expressions</code> не является булевым
 | |
|      *     типом. По умолчанию игнорировать.
 | |
|      *
 | |
|      * @return int Количество переменных в значении true.
 | |
|      */
 | |
|     public static function TrueCount (array $expressions, VarNotBoolAction $ifNotBool = VarNotBoolAction::Ignore): int
 | |
|     {
 | |
|         // Создаем пустой массив для хранения проверяемых аргументов
 | |
|         $checkArray = [];
 | |
| 
 | |
|         // Проверяем все входящие аргументы
 | |
|         foreach ($expressions as $expression)
 | |
|             // - если аргумент не является типом правда/ложь
 | |
|             if (!is_bool($expression))
 | |
|                 // -- то делаем следующее в зависимости от настроек:
 | |
|                 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($checkArray, fn ($value) => $value === true);
 | |
| 
 | |
|         // Возвращаем количество элементов в отфильтрованном массиве
 | |
|         return count($filtered);
 | |
|     }
 | |
| } |