Para converter um valor para outro tipo, coloque o tipo entre parênteses antes dele: (int) "42" dá o inteiro 42. A forma de função intval("42") faz o mesmo. O cast nunca falha: texto que não é número vira 0, e uma string que começa com dígitos fica só com esses dígitos.
Os casts do PHP são (int), (float), (string), (bool), (array) e (object). Cada um também tem uma função: intval(), floatval(), strval(), boolval().
String para int: o que (int) e intval() retornam
O PHP lê dígitos do início da string, depois de pular espaços iniciais, e para no primeiro caractere que não se encaixa num número. Notação com expoente conta como número, um prefixo 0x não.
Repare que "12.7" vira 12: o cast para int corta a parte fracionária, não arredonda. Nem (int) nem intval() imprimem aviso aqui, qualquer que seja a entrada.
intval() com base
intval($value, $base) lê a string em outro sistema numérico. Com base 0, o PHP olha o prefixo: 0x para hexadecimal, 0b para binário, um 0 inicial para octal.
Float para int: truncamento, não arredondamento
(int) descarta tudo depois do ponto decimal, em direção ao zero. Arredonde antes se quiser o inteiro mais próximo, e preste atenção aos parênteses:
O último par é a armadilha clássica dos floats: (0.1 + 0.7) * 10 é guardado como 7.999999..., então truncar dá 7. Arredondar antes dá 8. A página de matemática explica round, floor e ceil.
Cast para bool, string e array
Para bool, só alguns valores viram false: 0, 0.0, "", "0", null e []. Todo o resto é true, incluindo "0.0", " " e "false".
Para string, true vira "1", enquanto false e null viram "". Floats perdem o .0 final, e floats muito grandes ou muito pequenos usam notação com expoente.
Fazer cast de um array para string não junta os elementos. Isto imprime Tags: Array:
<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;
e o PHP adiciona um aviso:
Warning: Array to string conversion in /home/index.php on line 3
Use implode(", ", $array) ou json_encode($array) para transformar um array em texto.
Todos os casts num relance
Escolha um valor para ver o que intval, (bool), strval, is_numeric e gettype retornam para ele. Cada célula foi calculada pelo PHP 8.3.
| $x | intval | bool | strval | is_numeric | gettype |
|---|---|---|---|---|---|
| "10" | |||||
| "1abc" | |||||
| "abc" | |||||
| "" | |||||
| " " | |||||
| "0" | |||||
| "0.0" | |||||
| "1e1" | |||||
| "010" | |||||
| 1.5 | |||||
| true | |||||
| false | |||||
| null | |||||
| [] | |||||
| [1, 2] |
Strings numéricas e conversão automática
Uma string numérica é uma string que parece um número: "12", "-3.5", "1e3", com espaços opcionais em volta. O PHP converte essas strings automaticamente em aritmética, e is_numeric() diz se uma string se qualifica.
"12abc" + 1 ainda dá 13, mas o PHP 8 imprime Warning: A non-numeric value encountered, e "abc" + 1 lança um TypeError. Faça cast ou valide antes de fazer contas com a entrada do usuário.
settype() e gettype()
settype() muda o tipo de uma variável no lugar e gettype() informa o tipo. get_debug_type() retorna os nomes mais curtos que você vê nas mensagens de erro (int, float, string).
A maior parte do código usa um cast ($value = (int) $value;), porque é mais curto e se lê do mesmo jeito.
Valide a entrada em vez de fazer cast
(int) nunca diz não, então (int) "abc" vira 0 em silêncio e (int) "5 apples" vira 5. Para entrada de formulário, use filter_var com FILTER_VALIDATE_INT: ele retorna o inteiro ou false.
Compare o resultado com === false, porque 0 é um inteiro válido e == false o rejeitaria. A página sobre filter_var mostra intervalos e outros validadores.
Perguntas frequentes
Como converto uma string em int no PHP?
Use (int) $str ou intval($str); os dois dão o mesmo resultado na base 10. (int) "42" é 42, (int) "12abc" é 12 e (int) "abc" é 0. Para rejeitar uma entrada que não é um número inteiro, use filter_var($str, FILTER_VALIDATE_INT), que retorna false em vez de adivinhar.
Qual a diferença entre intval() e (int) no PHP?
Na base 10 eles retornam o mesmo resultado. intval() também aceita uma base: intval('ff', 16) é 255, e com base 0 ele lê prefixos como 0x, 0b e um 0 inicial para octal. Por ser uma função, intval também pode ser passada como callback, como em array_map('intval', $values).
O que (bool) "0" retorna no PHP?
false. A string "0" é um dos valores falsos do PHP, junto com "", 0, 0.0, null e []. Todas as outras strings são true, incluindo "0.0", " " e "false".
Como converto um número em string no PHP?
Use (string) $n, strval($n) ou coloque-o numa string: "$n". (string) 3.0 é "3"; para um número fixo de casas decimais, use number_format($n, 2) ou sprintf('%.2f', $n).