← К заметкам

Заметки

После settype ID превратился в true

После приведения типа ID неожиданно стал true. Обычно причина в такой строке:

$s_id = '123';
$s_id = settype($s_id, 'int');
var_dump($s_id); // bool(true)

settype меняет переданную переменную по ссылке, но возвращает логический результат операции. Присваивание записывает этот результат обратно поверх уже преобразованного ID.

Для обычного приведения используйте cast:

$s_id = '123';
$i_id = (int) $s_id;
var_dump($i_id); // int(123)

Либо вызывайте settype($s_id, 'int') без присваивания — хотя после этого имя переменной уже не отражает её тип.

Приведение не является проверкой ID: строка "123abc" при cast тоже может превратиться в число. Формат входного значения и существование записи проверяются отдельно. Для settype эта ошибка одинакова в обработчике CRM, PHP-действии БП и обычном PHP-скрипте.

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