BigJhow 0 Denunciar post Postado Junho 20, 2011 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? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 20, 2011 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. <?php $int = '3'; 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 ?> Compartilhar este post Link para o post Compartilhar em outros sites
BigJhow 0 Denunciar post Postado Junho 20, 2011 OK, vlw. Mas por que isso acontece? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 20, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 20, 2011 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 ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
BigJhow 0 Denunciar post Postado Junho 20, 2011 Se eu passar uma palavra por GET, ele retorna TRUE também. Como proceder? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 20, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
BigJhow 0 Denunciar post Postado Junho 20, 2011 Ah OK, valeu mesmo ;D Compartilhar este post Link para o post Compartilhar em outros sites