- Добавлено перечисление 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);
|
|
}
|
|
} |