No PHP, 'Olá $nome' imprime literalmente Olá $nome, enquanto "Olá $nome" imprime Olá Ana. A diferença não é bug nem detalhe de estilo: aspas duplas interpolam (o PHP varre a string procurando variáveis e sequências de escape e as substitui pelo valor), aspas simples são literais (o conteúdo vai para a string quase exatamente como você escreveu). Se sua variável "não aparece" dentro da string, é quase certo que ela está entre aspas simples. Vamos ao mecanismo, às regras de interpolação e aos casos que confundem.
O mecanismo: o que o PHP faz com cada aspa
Quando o PHP lê uma string entre aspas duplas, ele passa por ela caractere a caractere procurando dois gatilhos: o cifrão $ (início de uma variável a interpolar) e a contrabarra \ (início de uma sequência de escape, como \n, \t, \"). Tudo que casa é processado e trocado pelo valor correspondente antes de a string final existir.
Com aspas simples, esse trabalho não acontece. O PHP não procura variável nenhuma; o $ é só um cifrão comum. As únicas duas sequências que ele processa são \' (para você conseguir pôr uma aspa simples dentro) e \\ (para uma contrabarra literal). Qualquer outra coisa — inclusive \n — vai crua para a string.
Ou seja: a escolha da aspa decide se a string é um template que o PHP avalia ou um literal que ele copia. Esse é o conceito inteiro; o resto são as regras de como escrever a variável dentro do template.
$nome = "Ana";
echo 'Olá $nome, você tem 2 e-mails\n';
// Saída literal: Olá $nome, você tem 2 e-mails\n
// (o $nome não vira valor e o \n é um "\" seguido de "n")$nome = "Ana";
echo "Olá $nome, você tem 2 e-mails\n";
// Saída: Olá Ana, você tem 2 e-mails
// (com uma quebra de linha de verdade no fim)A escada da interpolação (sintaxe simples → complexa)
Dentro de aspas duplas existem dois "níveis" de sintaxe para inserir um valor. Saber onde um para e o outro começa resolve 90% das dúvidas:
Nível 0 — variável direta
O caso mais comum: escreva $variavel e pronto. O PHP lê até o primeiro caractere que não pode fazer parte de um nome de variável.
$nome = "Ana";
echo "Olá $nome!"; // Olá Ana!
Nível 1 — sintaxe simples com array e objeto
Você pode ir um passo adentro: uma chave de array ou uma propriedade de objeto, sem chaves e — atenção — sem aspas na chave do array.
$arr = ["chave" => "V"];
$obj->prop = "P";
echo "$arr[chave] e $obj->prop"; // V e P
Nível 2 — sintaxe complexa com { }
Para qualquer coisa além disso (chave entre aspas, método, acesso encadeado, array de array), envolva a expressão em chaves. Dentro das chaves você escreve a expressão exatamente como no código normal.
$arr = ["chave" => "V"];
echo "{$arr['chave']}"; // V (agora com aspas na chave)
echo "{$obj->getNome()}"; // método SÓ funciona assim
A regra que fecha
Sintaxe simples cobre $var, $var[chave] (chave sem aspas) e $var->prop. Chamada de método, chave entre aspas e expressões compostas exigem { }. Na dúvida, use chaves — sempre funciona.
Diagnóstico: por que "não aparece" ou aparece errado
Três sintomas e a causa de cada um:
- Aparece
$nomeliteral na tela: a string está entre aspas simples. Troque por duplas. É de longe o caso mais comum. - Aparece o valor mas com
()ou[chave]sobrando (ex.:P()ouArray): você usou sintaxe simples onde precisava de chaves. Envolva em{ }. - A quebra de linha
\naparece como texto\n: de novo, aspas simples — escapes só valem em aspas duplas (e em heredoc).
Um teste rápido: se a variável deveria aparecer e não aparece, olhe qual aspa abre a string. Noventa por cento das vezes o diagnóstico termina aí.
Com $arr = ['id' => 7];, o que echo "item $arr[id] ok"; imprime?
-
item $arr[id] ok -
item 7 ok -
item Array ok - erro de sintaxe
Na sintaxe simples de aspas duplas, a chave do array vai sem aspas (
$arr[id], não$arr['id']). Funciona e imprime7. Se você escrevesse"$arr['id']"aí sim daria erro/aviso — nesse caso precisaria de chaves:"{$arr['id']}".
Detalhes que valem saber
Resumo de decisão
| Você quer… | Use | Porque |
|---|---|---|
| Inserir o valor de uma variável | Aspas duplas "Olá $nome" |
Duplas interpolam |
Texto literal (com $, \) |
Aspas simples 'preço: $9' |
Simples não processam nada |
Quebra de linha \n, tab \t |
Aspas duplas (ou heredoc) | Escapes só valem lá |
| Método, chave com aspas, expressão | { } dentro de aspas duplas |
Sintaxe complexa exige chaves |
| Bloco multilinha que interpola | heredoc <<<TXT |
Igual a aspas duplas, multilinha |
| Bloco multilinha 100% literal | nowdoc <<<'TXT' |
Igual a aspas simples, multilinha |
Em uma frase: aspas duplas avaliam, aspas simples copiam — e quando a expressão for além de um nome simples, ponha { }.
A página oficial de strings do PHP detalha as quatro formas de escrever texto (aspas simples, aspas duplas, heredoc e nowdoc) e todas as regras de interpolação e escape — a referência completa do que este artigo resume.