«Minha string começa com esta palavra?» — a pergunta eterna do desenvolvedor PHP
\n\nImagine a situação: você está escrevendo um parser de URL, processando requisições de entrada ou simplesmente filtrando uma lista de arquivos. E surge a tarefa — precisa verificar se a string começa com um determinado conjunto de caracteres. Parece simples, certo? Mas não é bem assim. Até recentemente, o PHP não tinha uma função nativa para esta operação tão simples. Os desenvolvedores se viravam como podiam: uns cortavam a string com substr(), outros procuravam a posição com strpos(), e outros ainda mergulhavam no mundo das expressões regulares.
Neste artigo, vamos detalhar todas as formas de verificar o início de uma string em PHP. Você aprenderá não apenas como fazer isso "com elegância" nas versões modernas, mas também como resolver o problema em projetos "legados", onde o PHP 5 ainda é usado. Vamos lá!
\n\nA forma mais correta: str_starts_with() (PHP 8.0+)
\n\nSe o seu projeto roda em PHP 8.0 ou superior — você tem sorte. Você tem acesso à função nativa str_starts_with(), que faz exatamente o que o nome diz. Ela recebe dois argumentos: a string original e a substring que procuramos no início. Retorna true ou false.
<?php\n$url = "https://pythonlib.ru/php-tutorial";\n\nif (str_starts_with($url, "https://")) {\n echo "Link seguro, usando HTTPS";\n} else {\n echo "Atenção! Conexão não HTTPS";\n}\n// Exibirá: Link seguro, usando HTTPS\n?>\n\nPor que esta é a melhor opção?
\n- \n
- Legibilidade — o código fala por si. Você não precisa comentar o que esta linha faz. \n
- Desempenho — a função é otimizada no nível do código C do PHP. Ela funciona mais rápido do que verificações manuais. \n
- Segurança — sem problemas com codificações multibyte (a menos que você trabalhe com UTF-8 de forma especial, mas falaremos sobre isso depois). \n
A propósito, a função tem uma "irmã gêmea" — str_ends_with(), que verifica o final da string. Mas isso já é assunto para outro artigo.
O clássico: strpos()
\n\nAntes do surgimento do str_starts_with(), a forma mais popular era usar a função strpos(). Ela procura a primeira ocorrência de uma substring na string e retorna sua posição (número). Se a substring não for encontrada — retorna false.
O truque é que, se a substring estiver bem no início, sua posição será 0. E 0 em PHP é um valor falsy. Portanto, a verificação deve ser estrita:
\n\n<?php\n$string = "Olá, mundo!";\n\nif (strpos($string, "Olá") === 0) {\n echo "A string começa com Olá";\n} else {\n echo "Não, o início é diferente";\n}\n?>\n\nImportante! Sempre use o operador de comparação estrita ===, e não ==. Por quê? Imagine que você está procurando uma substring que não existe. strpos() retornará false. Se você escrever strpos($string, "teste") == 0, então false == 0 resultará em true (porque o PHP faz coerção de tipos). E seu código dirá que a string começa com "teste", quando não é verdade. Uma armadilha clássica para iniciantes!
Prós e contras do strpos()
\n- \n
- ✅ Funciona em todas as versões do PHP, a partir da 4. \n
- ✅ Não requer instalação de extensões. \n
- ❌ Código menos legível — é preciso lembrar da comparação estrita. \n
- ❌ Se usado incorretamente (sem ===), causa bugs difíceis de encontrar. \n
O método do avô: substr()
\n\nOutra forma que veio das profundezas da história. A ideia é simples: extrair da string um trecho do mesmo tamanho da substring procurada e compará-los.
\n\n<?php\n$filename = "relatorio_2024.pdf";\n\n$prefix = "relatorio_";\nif (substr($filename, 0, strlen($prefix)) === $prefix) {\n echo "Este é o relatório de 2024";