echo imprime texto. Escreva echo "Hello"; para mostrar uma string, echo "Hello, $name"; para incluir uma variável, e echo $a, $b; para imprimir vários valores em sequência. Tudo o que o echo imprime vira a página que o navegador mostra, ou o texto que você vê num terminal.
A primeira linha usa interpolação (a variável fica dentro das aspas duplas), a segunda junta strings com o operador ., e a terceira passa três valores separados por vírgulas. As três imprimem o mesmo tipo de resultado.
Imprimir HTML com echo
Numa página web, o echo normalmente imprime HTML. O navegador recebe o texto e renderiza as tags. Clique em Run e a aba Page mostra o resultado renderizado:
A última linha usa aspas simples para que as aspas duplas de class="note" não precisem de escape. Dentro de aspas simples as variáveis não são substituídas, então use-as para texto fixo. Se um valor vem de um visitante (um formulário, a URL), imprima-o com htmlspecialchars para que ele não consiga injetar HTML; veja a página sobre htmlspecialchars.
A tag curta de echo <?=
Dentro de um arquivo HTML, <?= $value ?> é a forma curta de <?php echo $value; ?>. Ela deixa os templates legíveis:
A tag curta de echo está sempre disponível. A outra tag curta, <? sem php, depende de uma configuração e não deve ser usada.
Imprimir vários valores e quebras de linha
O echo não adiciona quebra de linha. Num terminal, adicione "\n" (entre aspas duplas) ou a constante PHP_EOL. Em HTML, uma quebra de linha no código-fonte não aparece; use <br> ou elementos separados.
Vírgulas e pontos dão a mesma saída. Com vírgulas, o echo imprime cada valor por vez; com pontos, o PHP primeiro monta uma única string e depois a imprime. Quebras de linha têm uma página própria: quebra de linha no PHP.
echo ou print
print é o irmão mais velho. Ele imprime um valor e sempre retorna 1, o que permite usá-lo dentro de uma expressão. echo recebe qualquer quantidade de valores e não retorna nada.
echo | print | |
|---|---|---|
| Valores | um ou mais, separados por vírgula | exatamente um |
| Retorno | nada (é uma instrução) | 1 |
| Uso numa expressão | não | sim, $ok = print "x"; |
| Uso comum | quase tudo | raramente |
printf é outra coisa: ele formata valores com marcadores, como printf("%05.2f", 3.14159), e é explicado na página sobre sprintf.
Imprimir um array ou um objeto
O echo só imprime strings e valores que viram string (números, booleanos, null). Um array não vira. No seu PHP, aparece um aviso e a palavra Array:
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
Para mostrar o conteúdo, escolha a função certa para o caso:
Um objeto é mais rígido: a menos que a classe defina __toString(), echo $object; interrompe o script com Error: Object of class User could not be converted to string. Booleanos também costumam surpreender: echo true; imprime 1 e echo false; não imprime nada. Use var_dump($value) quando precisar ver o tipo e o valor exatos.
Erro comum: echo com parênteses e vírgulas
Como o echo parece uma função, muita gente escreve echo("a", "b");. Isso é um erro de sintaxe, já que os parênteses envolvem uma única expressão:
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
Tire os parênteses (echo "a", "b";) ou junte os valores (echo("a" . "b");). O mesmo vale para o print, que nunca aceita um segundo valor, com ou sem parênteses.
Perguntas frequentes
Qual a diferença entre echo e print no PHP?
Os dois imprimem strings. echo aceita vários valores separados por vírgula (echo $a, $b;) e não retorna nada; print recebe exatamente um valor e retorna 1, então pode ser usado dentro de uma expressão. Na prática, echo é usado em quase todo lugar.
Preciso de parênteses com echo?
Não. echo é uma construção da linguagem, não uma função, então echo "Hi"; é a forma normal. echo("Hi"); funciona porque os parênteses só agrupam uma expressão, mas echo("a", "b"); é um erro de sintaxe.
Por que echo false não imprime nada?
echo converte o valor em string, e false vira a string vazia "" enquanto true vira "1". Para ver o booleano em si, use var_dump($x); (imprime bool(false)) ou echo var_export($x, true); (imprime false).
O que significa <?= no PHP?
<?= $value ?> é a tag curta de echo, idêntica a <?php echo $value; ?>. Ela está sempre habilitada desde o PHP 5.4 e é o jeito comum de imprimir valores dentro de templates HTML.