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.
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.
// 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
// Entretanto 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 ?>
Exemplo #2 echo não é uma expressão
<?php // Como echo não se comporta como uma expressão, o código a seguir é inválido. ($some_var) ? echo 'true' : echo 'false'; ?>
Delimitar 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.
Exemplo #3 Usando parênteses
<?php echo "olá", PHP_EOL; // mostra "olá"
echo("olá"), PHP_EOL; // também mostra "olá", porque ("olá") é uma expressão válida
echo(1 + 2) * 3, PHP_EOL; // 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", PHP_EOL; // mostra "olá mundo"
echo("olá"), (" mundo"), PHP_EOL; // mostra "olá mundo"; os parênteses são parte de cada expressão ?>
Exemplo #4 Expressão inválida
<?php echo("olá", " mundo"), PHP_EOL; // 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' . '!';
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.
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).