Se você quiser realmente saber se uma string é uma representação válida de um verdadeiro tipo inteiro PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
No entanto, isso é impossível de ser executado, pois o conjunto é muito grande (nesse caso, não caberá na memória, se você fizer um loop, em seguida, serão necessários muitos ciclos de CPU).
Talvez você possa fazer uma pesquisa binária com comparação de cadeias, no entanto, existem maneiras melhores.
O ser mais simples:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Existem outras maneiras incomuns de abordá-lo, como:
is_int(array_keys([$string => null])[0])
Você também pode fazer comparação de strings, mas ainda precisará fazer coisas como ctype_digit, verificar se o tamanho é razoável (não desperdice CPU antes de fazer coisas como ctype_digit) e ter um tratamento estranho para números negativos.
Observe que filter_var não afirma corretamente que uma string é realmente a representação de um número inteiro PHP. Permitirá um + e um espaço em branco circundante.
Internamente, o PHP usa a função "_zend_handle_numeric_str" para comparação estrita, mas não a expõe diretamente em nenhum lugar, daí o truque usando as chaves da matriz (que a utiliza para converter qualquer sequência que seja uma representação de um número inteiro do PHP em um número inteiro do PHP).
Se você deseja uma conversão binária segura de e para PHP, esta é a abordagem a ser adotada.
Nem todo mundo pode querer isso e pode ser um caso de manipulação de entrada do usuário. filter_var não é tão ruim assim e será bastante seguro na maioria dos casos para pessoas novas no PHP.
Uma verificação de comprimento, ctype_digit e, em seguida, uma verificação do valor convertido em um intervalo também é bastante sólido para a entrada do usuário. Esquemas mais complexos podem querer aparar ou regex.
O problema com muitas das respostas aqui a esse respeito é que, embora a pergunta seja vaga, as respostas não devem ser. Se você vai propor uma solução, deve ser capaz de explicar exatamente o que ela vai esperar e o que não vai esperar. Sem isso, não há como saber se uma resposta corresponde a uma pergunta ou é segura. O manual do PHP nem sempre ajuda porque não explica todas as advertências de cada um dos métodos relevantes que ele fornece. Coisas como ctype_digit e is_int são muito confiáveis e fáceis de editar, mas as especificidades de is_numeric, filter_var e malabarismo (+ $ var) ou conversão (intval / floatval) são pouco documentadas.
Este é o fudge do PHP para você. Possui um número incontável de esquemas para interpretar cadeias de caracteres como números inteiros, com inconsistências. O método mais estrito de validar uma sequência inteira não é exposto diretamente ao usuário.