Si desea saber realmente si una cadena es una representación válida de un verdadero tipo entero de PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Sin embargo, esto es imposible de ejecutar ya que el conjunto es demasiado grande (no cabe en la memoria en este caso, si realiza un bucle en su lugar, tomará demasiados ciclos de CPU).
Quizás pueda hacer una búsqueda binaria con comparación de cadenas, sin embargo, hay mejores formas.
El ser más simple:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Hay otras formas inusuales de abordarlo, como:
is_int(array_keys([$string => null])[0])
También puede hacer una comparación de cadenas, pero aún tendrá que hacer cosas como ctype_digit, verificar que la longitud sea razonable (no desperdicie la CPU antes de hacer cosas como ctype_digit) y tener un manejo incómodo para los números negativos.
Tenga en cuenta que filter_var no afirma correctamente que una cadena es realmente la representación de un entero PHP. Permitirá un espacio en blanco inicial + y circundante.
Internamente, PHP usa la función "_zend_handle_numeric_str" para una comparación estricta, pero no expone directamente esto en ningún lado, de ahí el truco que usa las teclas de matriz (que lo usa para convertir cualquier cadena que sea una representación de un entero PHP en un entero PHP).
Si desea una conversión segura binaria hacia y desde PHP, este es el enfoque a seguir.
No todos pueden querer eso y podría ser un caso de manejo de la entrada del usuario. filter_var no es tan malo para eso y será bastante seguro en la mayoría de los casos para las personas nuevas en PHP.
Una verificación de longitud, ctype_digit y luego una verificación del valor convertido de que está en un rango también es bastante sólida para la entrada del usuario. Los esquemas más complejos pueden querer recortar o regex.
El problema con muchas de las respuestas aquí a ese respecto es que, si bien la pregunta es vaga, las respuestas no deberían serlo. Si va a proponer una solución, debería poder explicar exactamente qué es lo que esperará y qué no. Sin eso, no se sabe si una respuesta coincide con una pregunta o si es segura. El manual de PHP no siempre ayuda porque no explica todas las advertencias para cada uno de los métodos relevantes que proporciona. Cosas como ctype_digit e is_int son muy confiables y fáciles de predecir, pero los detalles de is_numeric, filter_var y malabares (+ $ var) o casting (intval / floatval) están poco documentados.
Este es PHP fudge para ti. Tiene una gran cantidad de esquemas para interpretar cadenas como enteros, con inconsistencias. El método más estricto para validar una cadena entera no está expuesto directamente al usuario.