Introdução
O PHP continua sendo uma das linguagens mais populares para desenvolvimento web, apesar do surgimento de muitas alternativas. No entanto, iniciantes frequentemente cometem erros típicos que podem levar a vulnerabilidades, redução de desempenho ou simplesmente código que não funciona. Neste artigo, analisaremos os 5 principais erros de desenvolvedores PHP iniciantes, mostraremos exemplos de código incorreto e daremos recomendações para corrigi-los. O material será útil tanto para quem está começando a aprender PHP quanto para quem deseja atualizar seus conhecimentos.
1. Ignorando Segurança: Injeções SQL e XSS
O erro mais comum e perigoso é a filtragem insuficiente de dados do usuário. Muitos iniciantes pegam dados diretamente de $_GET ou $_POST e os inserem em consultas SQL ou os exibem na página sem escape.
Código Incorreto (Injeção SQL)
<?php$username = $_POST['username'];$password = $_POST['password'];
// Consulta vulnerável$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";$result = mysqli_query($conn, $sql);?>Se um atacante inserir o valor ' OR '1'='1 no campo de nome de usuário, a consulta retornará todos os usuários e o login será realizado sem senha.
Código Correto (Usando Prepared Statements)
<?php$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");$stmt->bind_param("ss", $username, $password);$stmt->execute();$result = $stmt->get_result();?>O mesmo se aplica à saída de dados em HTML. Sempre use htmlspecialchars() para escapar caracteres especiais:
<?phpecho htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');?>2. Negligenciando a Tipagem Estrita
PHP é uma linguagem com tipagem dinâmica, e iniciantes frequentemente confiam na coerção automática de tipos. Isso pode levar a resultados inesperados, especialmente em comparações.
Exemplo de Comportamento Não Óbvio
<?php$value = "100 maçãs";if ($value == 100) { echo "Igual a 100"; // Exibirá "Igual a 100"!}?>A string "100 maçãs" é convertida implicitamente para o número 100, então a condição é verdadeira. Use comparação estrita (===) e tipagem estrita em projetos modernos:
Recomendações
- Declare
declare(strict_types=1);no início de cada arquivo. - Use comparação estrita
===e!==em vez de==e!=. - Especifique explicitamente os tipos para argumentos de funções e valores de retorno.
<?phpdeclare(strict_types=1);
function calcularTotal(float $preco, int $quantidade): float { return $preco * $quantidade;}?>3. Vazamentos de Memória e Gerenciamento Ineficiente de Recursos
Iniciantes frequentemente esquecem de fechar arquivos, conexões de banco de dados ou liberar memória após trabalhar com grandes volumes de dados. O coletor de lixo do PHP funciona automaticamente, mas isso não significa que você pode ignorar o gerenciamento de recursos.
Erro Típico: Conexão Não Fechada
<?php$conn = new mysqli($host, $user, $pass, $db);// ... muito código ...// Esqueceu de chamar $conn->close();?>Abordagem Correta: Usando try-finally ou Gerenciadores de Recursos
<?php$conn = new mysqli($host, $user, $pass, $db);try { // trabalhar com o BD} finally { $conn->close();}?>Para trabalhar com arquivos, use fopen()/fclose() em pares, e para arrays grandes, use unset() após o uso. Em versões modernas do PHP, você pode usar geradores (yield) para processar grandes conjuntos de dados sem carregar tudo na memória.