Ответ 1
Фактически вы должны убедиться, что вы вводите то, что вы имеете в виду:
$bigint = 9999999999999999999;
Не является целым числом PHP, но float:
float(1.0E+19)
Если бы вы сделали
$bigint = (int) 9999999999999999999;
На самом деле вы бы установили целое число, но это был бы не тот номер, который вы могли ожидать:
int(-8446744073709551616)
Это не проблема, чтобы превратить это в строку, как вы могли догадаться. Поэтому будьте осторожны, когда вы пишете цифры в код, который вы фактически пишете, что вы имеете в виду.
См. эту строку еще раз:
$bigint = 9999999999999999999;
попытайтесь понять, что вы на самом деле писали. Это не целое число, потому что PHP превратит его в float. См. Пример # 4 Переполнение целых чисел в 64-разрядной системе на странице целочисленная справочная страница.
Если вам нужна более высокая точность, проверка GNU Multiple Precision, она может иметь то, что вы ищете. Однако это не изменит, как писать числа в PHP:
$bigint = gmp_init("9999999999999999999");
$bigint_string = gmp_strval($bigint);
var_dump($bigint, $bigint_string);
Вывод:
resource(4) of type (GMP integer)
string(19) "9999999999999999999"