Introdução: por que strings e números em PHP são um drama eterno
\nImagine: você está criando uma calculadora de frete, e o usuário digita a quantidade de produtos como string "5". Você tenta somar 10 — e obtém "510" em vez de 15. Familiar? Bem-vindo ao mundo da conversão de tipos em PHP!
A pergunta "How do I convert a string to a number in PHP?" é uma das mais populares no Stack Overflow (mais de 2 milhões de visualizações). E não é à toa: o PHP é famoso por sua tipagem implícita, que ao mesmo tempo simplifica a vida e cria armadilhas.
\nNeste guia, vamos explorar 5 maneiras confiáveis de converter string em número, desmistificar conceitos e aprender a evitar bugs. Vamos nessa!
\n\nTeoria: o que acontece nos bastidores do PHP?
\nPHP é uma linguagem de tipagem dinâmica. Uma variável pode ser string e, um segundo depois, número. Mas há um detalhe:
\n- \n
- Conversão implícita de tipos — o PHP decide como interpretar os dados (e muitas vezes erra). \n
- Conversão explícita de tipos — você assume o controle. \n
Quando você escreve "5" + 10, o PHP automaticamente converte a string "5" em número. Mas tente "5 maçãs" + 10 — e obterá 15 (o PHP silenciosamente descarta " maçãs"). Já "maçãs 5" + 10 resulta em 10 (a string é tratada como zero). Caos? Sim. Mas vamos colocar ordem nisso.
Método 1: Operador de cast (int) e (float)
\nA maneira mais rápida e simples é usar o cast:
\n<?php\n$string = "42.8";\n$int = (int)$string; // 42 (parte inteira)\n$float = (float)$string; // 42.8\n\necho $int; // 42\necho $float; // 42.8\n?>\nImportante: (int) descarta a parte decimal sem arredondamento. Para arredondar, use round() após a conversão.
Quando usar: quando você tem certeza de que a string contém apenas um número e precisa de uma conversão rápida.
\n\nMétodo 2: Funções intval() e floatval()
\nEstas são as "versões avançadas" do cast — mais legíveis e flexíveis:
\n<?php\n$string = "123.45abc";\n\n$int = intval($string); // 123\n$float = floatval($string); // 123.45\n\n// Com especificação de base (apenas para intval)\n$hexString = "1A";\n$hexInt = intval($hexString, 16); // 26 (converte string hexadecimal)\n\necho $int; // 123\necho $float; // 123.45\necho $hexInt; // 26\n?>\nDiferencial: intval() trabalha com diferentes bases numéricas (binária, octal, hexadecimal). floatval() funciona apenas com decimal.
Quando usar: quando precisa lidar com "lixo" no final da string ou trabalhar com bases numéricas não padronizadas.
\n\nMétodo 3: Função settype() — conversão com retorno true/false
\nQuer não só converter, mas também verificar se a operação foi bem-sucedida? Use settype():
<?php\n$string = "99.9";\n$result = settype($string, "float"); // true\n\necho $string; // 99.9 (agora é float)\necho $result; // 1 (true)\n\n// Se a string não for numérica\n$badString = "olá";\n$result = settype($badString, "integer"); // false\n\necho $badString; // 0 (convertido para zero)\necho $result; // (vazio, false)\n?>\nImportante: settype() modifica a própria variável, não retorna um novo valor. Útil quando você precisa garantir que o tipo foi alterado.
Quando usar: quando é necessário verificar se a conversão foi bem-sucedida (por exemplo, em entradas de usuário).
\n\nMétodo 4: Truques aritméticos (e por que é melhor evitá-los)
\nSim, você pode escrever $number = $string + 0 — o PHP converte a string para número automaticamente. Ou $number = $st