babaev-an 6a4df8373c 20250524
- Добавлено перечисление VarNotBoolAction, для определения действий в классе BoolExtensions (методы AnyTrue и TrueCount), если передана часть не булевого типа.

- В расширении BoolExtensions в методах AnyTrue и TrueCount убрано выброс исключение, если какой-то аргумент из массива expressions не является булевым типом. Вместо него в обоих методах введён необязательный параметр $ifNotBool (тип VarNotBoolAction), который определяет действие: игнорирование (этот аргумент просто исключается из проверки), считать правдивым (вместо него ставится true) и считать ложным (вместо него ставится false).
2025-05-24 14:31:14 +03:00

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);
}
}