← Voltar aos artigos

strings · aspas · interpolação · sintaxe · heredoc

Aspas simples vs aspas duplas no PHP: por que a variável não aparece dentro delas

Publicado em 23/07/2026 · 6 min de leitura

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.

evite
$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")
prefira
$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:

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?

Na sintaxe simples de aspas duplas, a chave do array vai sem aspas ($arr[id], não $arr['id']). Funciona e imprime 7. 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 { }.

no manualStrings

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.

estudar na árvore →

Leve o estudo além do artigo

O manual inteiro do PHP como uma jornada: progresso por tópico, anotações e leitura embutida.