Документация

Проверка значений

DevBx\Core\Assert — проверки аргументов. Каждый метод либо возвращает приведённое значение, либо бросает Bitrix\Main\ArgumentException. Промежуточного состояния нет: после вызова значение заведомо нужного типа, и дальше по коду проверять его незачем.

Все методы статические и final.

Методы

Метод Что пропускает Что возвращает
expectInteger значение, равное своему intval int
expectIntegerPositive то же и строго больше нуля int
expectIntegerNonNegative то же и не меньше нуля int
expectStringNotNull непустую строку string
expectTrimStringNotNull строку, непустую после trim string без крайних пробелов
expectArray массив, в том числе пустой array
expectNotEmptyArray непустой массив array

Подпись у всех одна: ($arg, $argName = '', $customMsg = '').

Пример

php
use DevBx\Core\Assert;

public static function attach($elementId, array $fields)
{
    $elementId = Assert::expectIntegerPositive($elementId, 'elementId');
    $fields = Assert::expectNotEmptyArray($fields, 'fields');

    // дальше $elementId — точно положительное целое, $fields — точно непустой массив
}

Имя аргумента передавайте всегда

Текст исключения складывается из описания ошибки и второго параметра: not positive integer value passed to argument elementId. Без имени в сообщении останется пустое место, и по журналу будет не разобрать, какой именно аргумент не подошёл.

Чего эти методы не делают

Свой текст ошибки не работает. Третий параметр $customMsg объявлен у всех методов, но ни один из них его не читает: сообщение собирается из фиксированной строки. Нужен свой текст — проверяйте значение сами и бросайте своё исключение.

Проверка строки нестрогая. expectStringNotNull сравнивает $arg == '', поэтому null и false считаются пустыми. Число 0 на PHP 8 проверку проходит: сравнение числа с нечисловой строкой в восьмой версии идёт по строкам, а не по числам.

expectInteger принимает числовую строку. '42' пройдёт и вернётся как 42, а '42abc' будет отклонено: intval даёт 42, а исходное значение с ним не совпадает.