Introdução: por que as strings não querem somar?
\n\nTodo desenvolvedor que já escreveu em PHP, pelo menos uma vez, se deparou com uma situação em que, em vez do número esperado, obteve um resultado estranho. Você tenta somar duas variáveis obtidas de um formulário ou banco de dados, e o PHP retorna algo como 1520 em vez de 35. Familiar? Este é um problema clássico: converter string em número em PHP.
PHP é uma linguagem com tipagem dinâmica. Isso é ao mesmo tempo uma bênção e uma maldição. Por um lado, ele tenta adivinhar o que você quis dizer e converte os tipos automaticamente. Por outro, esses "chutes" frequentemente levam a bugs difíceis de encontrar. Hoje vamos analisar todas as formas de converter string em número em PHP — do simples ao avançado — e aprender a fazer isso corretamente.
\n\nResposta rápida: 4 maneiras em 30 segundos
\n\nSe você precisa de uma solução rápida — aqui está uma cola. Mas não se apresse em fechar o artigo: cada método tem suas particularidades e armadilhas.
\n\n<?php\n// Método 1: Conversão explícita de tipo\n$number = (int) "42"; // int(42)\n$float = (float) "3.14"; // float(3.14)\n\n// Método 2: Função intval()\n$number = intval("42"); // int(42)\n\n// Método 3: Função floatval() / doubleval()\n$float = floatval("3.14"); // float(3.14)\n\n// Método 4: Com settype()\n$str = "42";\nsettype($str, "integer"); // agora $str = int(42)\n?>\n\nTodos os quatro métodos funcionam, mas se comportam de maneira diferente em situações limite. Vamos analisar cada um em detalhes.
\n\n1. Conversão explícita de tipos: (int) e (float)
\n\nA maneira mais rápida e óbvia de converter string em número em PHP é usar os operadores de conversão de tipos. Eles funcionam como uma "troca forçada" do tipo da variável.
\n\nExemplos com (int)
\n\n<?php\necho (int) "42"; // 42\necho (int) "3.99"; // 3 (a parte fracionária é descartada!)\necho (int) "42 maçãs"; // 42 (número no início)\necho (int) "maçã 42"; // 0 (não consegue reconhecer o número)\necho (int) ""; // 0\necho (int) null; // 0\n?>\n\nImportante: O PHP tenta encontrar um número no início da string. Se a string começar com letras, o resultado será 0. Esse comportamento frequentemente causa erros, especialmente ao trabalhar com entrada do usuário.
Exemplos com (float)
\n\n<?php\necho (float) "3.14"; // 3.14\necho (float) "3,14"; // 3.0 (a vírgula não funciona!)\necho (float) "2.99 euros"; // 2.99\necho (float) "abc"; // 0\n?>\n\nDica: Lembre-se de que o PHP usa o ponto como separador decimal. Se os usuários inserirem números com vírgula (como é comum no Brasil), é necessário primeiro substituir a vírgula pelo ponto usando str_replace(',', '.', $str).
2. Funções intval() e floatval()
\n\nEssas funções são uma versão mais "inteligente" da conversão explícita. Elas fazem o mesmo, mas permitem definir a base numérica para intval().
<?php\n// intval() — conversão para número inteiro\necho intval("42"); // 42\necho intval("1010", 2); // 10 (sistema binário!)\necho intval("FF", 16); // 255 (hexadecimal)\necho intval("42.99"); // 42 (a parte fracionária é descartada)\n\n// floatval() — conversão para número de ponto flutuante\necho floatval("3.14"); // 3.14\necho floatval("2.71828"); // 2.71828\n?>\n\nQuando usar: intval() é indispensável se você trabalha com números em diferentes bases (por exemplo, analisando códigos HEX de cores). Para números comuns, praticamente não há diferença em relação a (int).
3. Função settype(): conversão no local
\n\nAo contrário dos métodos anteriores, settype() não retorna um novo valor, mas