Strings
Esta aula aborda o trabalho com strings em PHP, incluindo as diferenças entre aspas simples e duplas, interpolação de variáveis, sintaxe heredoc e nowdoc, e funções essenciais para manipulação de strings. O conteúdo é prático e progressivo, com exemplos de código e exercícios.
Strings são um dos tipos de dados mais utilizados em PHP, representando sequências de caracteres. Nesta aula, exploraremos as principais formas de declarar e manipular strings, desde a escolha entre aspas simples e duplas até funções poderosas que facilitam o processamento de texto.
Dominar strings é essencial para qualquer desenvolvedor PHP, pois elas estão presentes em formulários, bancos de dados, APIs e saídas HTML. Vamos mergulhar nos detalhes para que você possa escrever código mais eficiente e seguro.
Aspas simples vs duplas
Em PHP, strings podem ser delimitadas por aspas simples (') ou duplas ("). A principal diferença está na forma como o PHP interpreta o conteúdo: aspas duplas interpolam variáveis e interpretam sequências de escape especiais, enquanto aspas simples tratam quase tudo literalmente (exceção: \' e \\).
Por exemplo, ao usar aspas duplas, o PHP substitui variáveis dentro da string pelo seu valor. Já com aspas simples, o nome da variável é exibido como texto. Isso impacta desempenho e segurança: aspas simples são ligeiramente mais rápidas por não exigirem análise de interpolação, mas aspas duplas oferecem mais flexibilidade.
$nome = "Maria";
echo "Olá, $nome!"; // Saída: Olá, Maria!
echo 'Olá, $nome!'; // Saída: Olá, $nome!Sequências de escape como \n (nova linha) e \t (tabulação) funcionam apenas em strings com aspas duplas. Em aspas simples, a sequência \n é exibida como literal. Use aspas simples quando não precisar de interpolação ou escapes especiais para evitar processamento desnecessário.
Interpolação
A interpolação de variáveis em strings com aspas duplas permite incorporar variáveis diretamente no texto. O PHP reconhece variáveis simples ($var) e expressões mais complexas com chaves ({}), como {$obj->propriedade} ou {$array['chave']}.
As chaves são úteis para desambiguar o nome da variável de caracteres adjacentes. Por exemplo, "$nomes" tentaria interpolar uma variável chamada $nomes, enquanto "{$nome}s" interpola $nome e adiciona o "s" literal.
$cidade = "São Paulo";
echo "A cidade de {$cidade} é linda!"; // A cidade de São Paulo é linda!
echo "$cidade é linda!"; // Funciona, mas cuidado com caracteres seguintesA interpolação também funciona com índices de array e propriedades de objetos, desde que usados com chaves. Evite interpolar expressões complexas; prefira concatenar para maior clareza.
Heredoc e Nowdoc
Heredoc e Nowdoc são sintaxes para declarar strings multilinha sem precisar escapar aspas. Um heredoc é iniciado com <<<IDENTIFICADOR e terminado com IDENTIFICADOR; em uma linha separada. O conteúdo entre eles é interpretado como uma string com aspas duplas (interpolação e escapes). Já o nowdoc usa o identificador entre aspas simples (<<<'IDENTIFICADOR') e trata o conteúdo literalmente (como aspas simples).
Essas sintaxes são ideais para grandes blocos de texto, como HTML ou SQL, mantendo a legibilidade. O identificador deve seguir as mesmas regras de nomes de variáveis e não pode ser precedido por espaços ou tabs no fechamento.
$nome = "João";
$heredoc = <<<HTML
<div>
<p>Olá, $nome!</p>
</div>
HTML;
echo $heredoc;
// <div>
// <p>Olá, João!</p>
// </div>
$nowdoc = <<<'TEXTO'
Isso é literal: $nome não é interpolado.
TEXTO;
echo $nowdoc; // Isso é literal: $nome não é interpolado.No heredoc, variáveis são interpoladas; no nowdoc, não. Ambos preservam quebras de linha e espaçamentos. Use heredoc quando precisar de interpolação e nowdoc para conteúdo estático.
Funções essenciais de string
O PHP oferece centenas de funções para manipular strings. Aqui estão algumas das mais úteis no dia a dia:
strlen()– retorna o comprimento da string em bytes.strpos()– encontra a posição da primeira ocorrência de uma substring (cuidado com falsy 0).substr()– extrai parte de uma string.str_replace()– substitui todas as ocorrências de uma substring por outra.trim()– remove espaços em branco do início e fim.strtolower()estrtoupper()– convertem para minúsculas/maiúsculas.explode()eimplode()– dividem/ unem strings com base em um delimitador.
$texto = " Olá, Mundo! ";
echo strlen($texto); // 15 (incluindo espaços)
echo strpos($texto, "Mundo"); // 7
echo substr($texto, 2, 4); // "Olá"
echo str_replace("Mundo", "PHP", $texto); // " Olá, PHP! "
echo trim($texto); // "Olá, Mundo!"
echo strtolower($texto); // " olá, mundo! "
$partes = explode(",", $texto); // [" Olá", " Mundo! "]
echo implode("-", $partes); // " Olá- Mundo! "Lembre-se de que muitas funções de string são sensíveis a maiúsculas/minúsculas. Para versões case-insensitive, use funções como stripos() e str_ireplace(). Sempre verifique o tipo de retorno, pois funções como strpos() podem retornar false (que é igual a 0 em comparação frouxa).
Boas práticas
Ao trabalhar com strings em PHP, prefira aspas simples quando não houver interpolação ou escapes, pois são mais rápidas. Use heredoc/nowdoc para strings multilinha para melhor legibilidade. Sempre valide e sanitize strings vindas de fontes externas para evitar injeção de código. Para concatenação, o operador . é eficiente, mas em loops grandes, considere usar arrays e implode() para desempenho.
Exercícios
- Crie uma string com aspas simples que contenha uma variável e exiba o resultado. Depois, faça o mesmo com aspas duplas. Compare as saídas.
- Use interpolação com chaves para exibir o valor de um array associativo dentro de uma string.
- Crie um heredoc que contenha HTML com uma variável interpolada e exiba o resultado.
- Use as funções
explode()eimplode()para transformar uma lista separada por vírgulas em uma string separada por hífens. - Escreva um código que verifique se a string "PHP é incrível" contém a palavra "incrível" usando
strpos()e exiba uma mensagem apropriada.
$nome = "Ana";
echo 'Olá, $nome!'; // Olá, $nome!
echo "Olá, $nome!"; // Olá, Ana!$dados = ["nome" => "Carlos", "idade" => 30];
echo "{$dados['nome']} tem {$dados['idade']} anos."; // Carlos tem 30 anos.$titulo = "Meu Site";
$html = <<<HTML
<!DOCTYPE html>
<html>
<head><title>$titulo</title></head>
<body><h1>Bem-vindo</h1></body>
</html>
HTML;
echo $html;$lista = "maçã,banana,laranja";
$frutas = explode(",", $lista);
echo implode("-", $frutas); // maçã-banana-laranja$frase = "PHP é incrível";
if (strpos($frase, "incrível") !== false) {
echo "A palavra 'incrível' foi encontrada.";
} else {
echo "A palavra não foi encontrada.";
}