В документации указано, что максимальное знаковое целое число для функции 9223372036854775807.
И, если мы в функцию добавляем строку с превышенной нормой, то на выходе получим 9223372036854775807.
echo (int) '4200000000000000000000';
// 9223372036854775807
Но если будет не строка, а число - на выходе получаем нечто, по не ясным принципам:
echo (int) 4200000000000000000000;
// -5857648805777768448
Почему так?
Переполнение сетки же. Оно у вас несколько раз происходит.
Для теста можете такой код запустить:
$test = 4200000000000000000000 - 9223372036854775807;
while($test > 0) {
$test = $test - 9223372036854775807;
}
echo (int)$test; // -5857648805777768448
Продвижение своими сайтами как стратегия роста и независимости