<?php namespace goodboyalex\php_components_pack\extensions; use Exception; /** * Расширение типа "правда/ложь". * * @author Александр Бабаев * @package php_components_pack * @version 1.0 * @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 Переменные формата правда/ложь. * * @return bool Есть ли хотя бы одно в значении true. * * @throws Exception Выбрасывается, если хотя бы один аргумент <code>expressions</code> не являются типом * правда/ложь. */ public static function AnyTrue (array $expressions): bool { return self::TrueCount($expressions) > 0; } /** * Вычисляет количество переменных формата правда/ложь <code>expressions</code> в значении <code>true</code>. * * @param array $expressions Переменные формата правда/ложь. * * @return int Количество переменных в значении true. * * @throws Exception Выбрасывается, если хотя бы один аргумент <code>expressions</code> не являются типом * правда/ложь. */ public static function TrueCount (array $expressions): int { // Проверяем все аргументы foreach ($expressions as $expression) // - если аргумент не является типом правда/ложь if (!is_bool($expression)) // -- то выбрасываем исключение throw new Exception('All arguments must be bool. / Все аргументы должны быть типа «правда/ложь».'); // Используем array_filter для фильтрации всех истинных значений $filtered = array_filter($expressions); // Возвращаем количество элементов в отфильтрованном массиве return count($filtered); } }