Con
var_dump(PHP_INT_MIN); //int(-9223372036854775808)me sale el numero -9223372036854775808. Si asigno este número a una variable, es del tipo float.
$n = -9223372036854775808; var_dump($n); //float(-9.2233720368548E+18)Esto me da números enteros:
$n = PHP_INT_MIN; var_dump($n); //int(-9223372036854775808)y
$n = intval("-9223372036854775808"); var_dump($n); //int(-9223372036854775808)y
$n = sscanf("-9223372036854775808","%d")[0]; var_dump($n); //int(-9223372036854775808)¿Por qué PHP me da un tipo flotante para -9223372036854775808?
Como el signo menos no forma parte de la sintaxis de un número en el código fuente, es el operador de negación unario. Asi que
$n = -9223372036854775808;es tratado como
$n = -(9223372036854775808); Pero 9223372036854775808 es más grande que PHP_INT_MAX , por lo que se analiza como un float y luego se niega.