“Fale mais sobre isso”: como descobrir com o que uma string começa em PHP?
\n\nTodo desenvolvedor já se deparou com a pergunta: “Essa string começa com uma determinada palavra, caractere ou prefixo?”. Parece um detalhe, mas disso pode depender a lógica de roteamento, validação de URL, verificação de email ou análise de entrada do usuário. Em PHP, como em qualquer outra linguagem, existem várias maneiras de resolver esse problema. Mas qual delas é a correta? E qual é a mais performática? E o que fazer se você estiver usando uma versão antiga do PHP?
\n\nNeste artigo, vamos analisar todas as formas populares de verificar o início de uma string em PHP, desde os clássicos substr e strpos até o moderno str_starts_with, introduzido no PHP 8.0. Você aprenderá não apenas “como”, mas também “por que” escolher cada método. Vamos nessa! 🚀
Por que verificar o início de uma string?
\n\nImagine que você está criando um parser de logs, processando URLs ou filtrando arquivos por extensão. Ou talvez precise filtrar todos os emails que começam com “admin@”. Ou verificar se uma requisição à API veio com o prefixo correto. Em todos esses casos, você precisa de uma coisa: saber se a string contém uma determinada substring no início.
\n\nParece uma tarefa trivial, mas não conhecer os detalhes pode levar a bugs difíceis de encontrar. Especialmente se você usar strpos sem verificar se o retorno é false. Vamos analisar cada método em detalhes.
Método #1: str_starts_with (PHP 8.0+) — moderno e óbvio
\n\nA partir do PHP 8.0, a linguagem ganhou a função str_starts_with(). Ela faz exatamente o que o nome sugere: verifica se uma string começa com uma determinada substring. E faz isso de forma rápida, legível e sem surpresas.
<?php\n$url = "https://pythonlib.ru";\nif (str_starts_with($url, "https://")) {\n echo "A string começa com https://";\n} else {\n echo "A string NÃO começa com https://";\n}\n// Resultado: A string começa com https://\n?>\n\nPor que isso é incrível?
\n- \n
- ✅ O código é lido como texto em inglês: “string starts with”. \n
- ✅ Retorna apenas
trueoufalse— sem verificações extras. \n - ✅ Funciona corretamente com codificações multibyte (UTF-8). \n
- ✅ É sensível a maiúsculas/minúsculas. Para verificação case-insensitive, use
str_starts_with(strtolower(...)). \n
Este método é o líder absoluto se você usa PHP 8.0 ou superior. Mas e se seu projeto ainda estiver no PHP 7? Continue lendo.
\n\nMétodo #2: substr — um velho amigo é melhor que dois novos
\n\nAntes do str_starts_with, muitos usavam substr para comparar o início de uma string. A ideia é simples: extrair um trecho da string com o comprimento desejado e compará-lo com a substring procurada.
<?php\n$string = "Olá, mundo!";\n$prefix = "Olá";\n\nif (substr($string, 0, strlen($prefix)) === $prefix) {\n echo "A string começa com 'Olá'";\n} else {\n echo "A string NÃO começa com 'Olá'";\n}\n?>\n\nVantagens:
\n- \n
- Funciona em qualquer versão do PHP. \n
- Lógica clara e direta. \n
Desvantagens:
\n- \n
- É necessário lembrar de usar
strlen()— fácil errar o comprimento. \n - Se a string for mais curta que o prefixo,
substrretorna uma string vazia, e a comparação falha (mas não quebra). \n - Menos legível que a alternativa moderna. \n
Ainda assim, é uma opção totalmente funcional e confiável. O importante é não esquecer de usar a comparação estrita ===.
Método #3: strpos — esperto, mas perigoso
\n\nOutra abordagem clássica é usar strpos(). A função encontra a primeira ocorrência de uma substring