Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso checar se um valor passado via GET é um integer. O problema é que a função is_int NÃO funciona (retorna false). Como fazer?
OK, vlw. Mas por que isso acontece?
Por que por default, oque vem da URL é string
você testa uma string com is_int(), retorna false; claro.
somando com zero, você não altera o valor, mas se aproveita do fraca tipagem do php, para que esse faça uma conversão automatica de tipo para você.
Por isso 'funciona'.
Não é uma forma 'elegante', já que se aproveita de uma particularidade da linguagem, porém é bem eficiente.
Porque ele está vindo por $_GET como uma string.
Agora, se eu enviar um número ou uma palavra, ele retorna TRUE...
você faz uma varificação
<?php
$int = 'a';
if( is_numeric( $int ) )
{
$int += 0;
}
var_dump( $int );
?>Se eu passar uma palavra por GET, ele retorna TRUE também. Como proceder?
pq ai essa tua palavra somada com 0, vira o int correspondente (1), e por isso true.
eu faria uma verificação com expressão regular ou algo do tipo.
Ah OK, valeu mesmo ;D
Faça uma conversão automática com o operador de adição '+'. Se qualquer um dos operadores for float, então todos os operadores são avaliados como floats, e o resultado será um float. De outra forma, se os operadores forem interpretados como integers então o resultado será um integer.
var_dump( $int ); // string '3' (length=1)
var_dump( is_int( $int ) ); // boolean false
var_dump( $int + 0 ); // int 3
var_dump( is_int( $int + 0 ) ); // boolean true
$float = '3.59';
var_dump( $float ); // string '3.59' (length=4)
var_dump( $float + 0 ); // float 3.59
var_dump( $int + $float ); // float 6.59
?>