Есть ли способ на самом деле проверить до или после приведения из строки к int, если была потеря точности и выдать исключение?
$id = "21321312412435453453453454"$numId = (int) $id;
Это должно работать для вас:
(Только что использовал php predefined constants
сравнить это)
$id = "21321312412435453453453454";
if($id > PHP_INT_MAX)
echo "too big";
else
echo "okay";
Выход:
too big
РЕДАКТИРОВАТЬ:
Для отрицательных вы можете просто определить константу следующим образом:
define('PHP_INT_MIN', ~PHP_INT_MAX);
Вы можете прочитать о PHP_INT_MAX
даже в руководстве: http://php.net/manual/en/language.types.integer.php
И цитата оттуда:
Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). Максимальное значение для 64-разрядных платформ обычно составляет около 9E18, за исключением Windows, которая всегда является 32-разрядной. PHP не поддерживает целые числа без знака. Целочисленный размер можно определить с помощью константы PHP_INT_SIZE, и максимальная значение с использованием константы PHP_INT_MAX начиная с PHP 4.4.0 и PHP 5.0.5.
Попробуйте привести его обратно к строке и сравнить два.