CascadiaPHP 2024

echo

(PHP 4, PHP 5, PHP 7, PHP 8)

echoEnvia uma ou mais strings para a saída

Descrição

echo(string ...$expressions): void

Envia uma ou mais expressões para a saída, sem novas linhas ou espaços adicionais.

echo não é uma função mas sim uma construção de linguagem. Seus argumentos são uma lista de expressões logo após a palavra-chave echo, separadas por vírgulas e não delimitadas por parênteses. Diferentemente de outras construções de linguagem, echo não tem nenhum valor de retorno, portando não pode ser usada no contexto de uma expressão.

echo também tem uma sintaxe de atalho em HTML, onde pode-se seguir imediatamente a etiqueta de abertura com um sinal de igual. Esta sintaxe está disponível mesmo que a configuração short_open_tag esteja desabilitada.

I have <?=$foo?> foo.

As principais diferenças para a função print são que echo aceita múltiplos argumentos e não tem um valor de retorno.

Parâmetros

expressions

Uma ou mais expressões a serem enviadas para a saída, separadas por vírgula. Valores não-string serão convertidas forçadamente para strings, mesmo quando a diretiva strict_types estiver habilitada.

Valor Retornado

Nenhum valor é retornado.

Exemplos

Exemplo #1 Exemplos de echo

<?php
echo "echo não requer parênteses.";

// Strings podem ser passadas individualmente como múltiplos argumentos ou
// concatenadas e passadas como um único argumento
echo 'Esta ', 'string ', 'foi ', 'criada ', 'com múltiplos parâmetros.', "\n";
echo
'Esta ' . 'string ' . 'foi ' . 'criada ' . 'com concatenação.' . "\n";

// Nenhuma nova linha ou espaço são adicionados; o código abaixo mostra "olámundo" em apenas uma linha
echo "olá";
echo
"mundo";

// O mesmo que o exemplo acima
echo "olá", "mundo";

echo
"Esta string ocupa
múltiplas linhas. As novas linhas
também estarão na saída."
;

echo
"Esta string ocupa\nmúltiplas linhas. As novas linhas\ntambém estarão na saída.";

// O argumento pode ser qualquer expressão que produza uma string
$foo = "exemplo";
echo
"foo é um $foo"; // foo é um exemplo

$fruits = ["limão", "laranja", "banana"];
echo
implode(" e ", $fruits); // limão e laranja e banana

// Expressões não-string não convertidas à força para string, mesmo se declare(strict_types=1) for usada
echo 6 * 7; // 42

// Como echo não se comporta como uma expressão, o código a seguir é inválido.
($some_var) ? echo 'true' : echo 'false';

// Entretando os exemplos a seguir irão funcionar:
($some_var) ? print 'true' : print 'false'; // print também é uma contrução de linguagem, mas
// é uma expressão válida, retornando 1,
// portanto pode ser usada neste contexto.

echo $some_var ? 'true': 'false'; // primeiro avalia a expressão e depois passa para echo
?>

Notas

Nota: Como esta é uma construção da linguagem e não uma função, ela não pode ser chamada usando funções variáveis ou argumentos nomeados.

Nota: Usando com parênteses

Envolver um argumento de echo com parênteses não irá causar um erro de sintaxe, e produzirá uma sintaxe que se parece com uma chamade normal de uma função. Entretanto, isto pode gerar confusão, porque os parênteses, na verdade, são parte da expressão que será enviada para a saída, e não parte da sintaxe de echo em si.

<?php
echo "olá";
// mostra "olá"

echo("olá");
// também mostra "olá", porque ("olá") é uma expressão válida

echo(1 + 2) * 3;
// mostra "9"; os parênteses fazem com que 1+2 seja avaliada primeiro, e depois 3*3
// a instrução echo enxerga toda a expressão como um só argumento

echo "olá", " mundo";
// mostra "olá mundo"

echo("olá"), (" mundo");
// mostra "olá mundo"; os parênteses são parte de cada expressão

echo("olá", " mundo");
// Lança um erro de interpretação porque ("olá", " mundo") não é uma expressão válida
?>

Dica

Passar múltiplos argumentos para echo pode evitar complicações que surgem com a precedência do operador de concatenação no PHP. Por exemplo, o operador de concatenação tem precedência maior que o operador ternário, e antes do PHP 8.0.0 tinha a mesma precedência que adição e subtração:

<?php
// Abaixo, a expressão 'Olá ' . isset($name) é avaliada primeiro,
// e é sempre verdadeira, portanto o argumento para echo será sempre $name
echo 'Olá ' . isset($name) ? $name : 'Maria Rodrigues' . '!';

// O comportamento pretendido requer parênteses adicionais
echo 'Olá ' . (isset($name) ? $name : 'Maria Rodrigues') . '!';

// Nas versões do PHP anteriores à 8.0.0, o código abaixo mostra "2" ao invés de "Soma: 3"
echo 'Soma: ' . 1 + 2;

// Da mesma forma, adicionar parênteses assegura a ordem pretendida de avaliação
echo 'Soma: ' . (1 + 2);

Se múltiplos argumentos forem passados, os parênteses não serão necessário para reforçar precedência, pois cada expressão é independente:

<?php
echo "Olá ", isset($name) ? $name : "Maria Rodrigues", "!";

echo
"Soma: ", 1 + 2;

Veja Também

add a note

User Contributed Notes 3 notes

up
36
pemapmodder1970 at gmail dot com
7 years ago
Passing multiple parameters to echo using commas (',')is not exactly identical to using the concatenation operator ('.'). There are two notable differences.

First, concatenation operators have much higher precedence. Referring to http://php.net/operators.precedence, there are many operators with lower precedence than concatenation, so it is a good idea to use the multi-argument form instead of passing concatenated strings.

<?php
echo "The sum is " . 1 | 2; // output: "2". Parentheses needed.
echo "The sum is ", 1 | 2; // output: "The sum is 3". Fine.
?>

Second, a slightly confusing phenomenon is that unlike passing arguments to functions, the values are evaluated one by one.

<?php
function f($arg){
var_dump($arg);
return
$arg;
}
echo
"Foo" . f("bar") . "Foo";
echo
"\n\n";
echo
"Foo", f("bar"), "Foo";
?>

The output would be:
string(3) "bar"FoobarFoo

Foostring(3) "bar"
barFoo

It would become a confusing bug for a script that uses blocking functions like sleep() as parameters:

<?php
while(true){
echo
"Loop start!\n", sleep(1);
}
?>

vs

<?php
while(true){
echo
"Loop started!\n" . sleep(1);
}
?>

With ',' the cursor stops at the beginning every newline, while with '.' the cursor stops after the 0 in the beginning every line (because sleep() returns 0).
up
-7
t3tesla at gmail dot com
3 years ago
We can use the 'echo' shortcut syntax with the conditional operator (expr1) ? (expr2) : (expr3)

<?php
$some_var
= 10;
?>
Back to html :
<p class="<?=$some_var>5 ? "class1" : "class2"?>">Some text.</p>

Will give : <p class="class1">Some text.</p>

<?php
$some_var
= 4;
?>
<p class="<?=$some_var>5 ? "class1" : "class2"?>">Some text.</p>

Will give : <p class="class2">Some text.</p>
up
-11
retrobytespr at mail dot com
2 years ago
If you have a large block of text, say your blog or something includes code examples, you may use the <<< operator (?) to define the start and end of your block to be echoed out. For instance:

<?php
echo <<< JAVASCRIPT

function convertTroyOuncesToGrams(troyOunce) {
return troyOunce / 31.1034768;
}

JAVASCRIPT; # End of block

?>

You may also embed PHP strings and other simple scalars into your blocks of text, for example:

<?php
$troyOunceAsGrams
= 31.1034768;

echo <<< JAVASCRIPT

function convertTroyOuncesToGrams(troyOunce) {
return troyOunce /
{$troyOunceAsGrams};
}

JAVASCRIPT;
To Top