Проверка значений
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 = '').
Пример
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, а исходное значение с ним не совпадает.