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