echo

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

echoMuestra una string

Descripción

echo(string ...$expressions): void

Muestra una o varias expresiones, sin espacios o nueva línea adicionales.

echo no es una función sino una construcción del lenguaje. Sus argumentos son una lista de expresiones que siguen la palabra clave echo, separados por comas, y no delimitados por paréntesis. A diferencia de otras construcciones del lenguaje, echo no tiene valor de retorno, por lo que no puede ser utilizada en el contexto de una expresión.

echo también dispone de una sintaxis corta, donde se puede hacer seguir inmediatamente la etiqueta PHP de apertura con un signo igual (=). Esta sintaxis está disponible incluso si la directiva de configuración short_open_tag está desactivada.

Tengo <?=$foo?> foo.

La mayor diferencia con print es que echo acepta múltiples argumentos y no retorna ningún valor.

Parámetros

expressions

Una o varias expresiones de string a mostrar, separadas por comas. Los valores que no son strings serán convertidos a strings, incluso si la directiva strict_types está activada.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Ejemplo con echo

<?php
echo "echo no requiere paréntesis.";

// Las strings pueden ser pasadas individualmente como múltiples argumentos o
// concatenadas y pasadas como un solo argumento
echo 'Esta ', 'string ', 'fue ', 'creada ', 'con múltiples parámetros.', "\n";
echo
'Esta ' . 'string ' . 'fue ' . 'creada ' . 'con concatenación.' . "\n";

// Ninguna nueva línea o espacio es añadido; lo siguiente muestra "helloworld", todo en una línea
echo "hola";
echo
"mundo";

// Igual que lo anterior
echo "hola", "mundo";

echo
"Esta string abarca
múltiples líneas. Los saltos de línea serán
mostrados también"
;

echo
"Esta string abarca\nmúltiples líneas. Los saltos de línea serán\nmostrados también.";

// El argumento puede ser cualquier expresión que produzca una string
$foo = "ejemplo";
echo
"foo es $foo"; // foo es ejemplo

$frutas = ["limón", "naranja", "plátano"];
echo
implode(" y ", $frutas); // limón y naranja y plátano

// Las expresiones que no son strings son convertidas a strings, incluso si declare(strict_types=1) es utilizado
echo 6 * 7; // 42

// Sin embargo, los siguientes ejemplos funcionarán:
($some_var) ? print 'true' : print 'false'; // print también es una construcción, pero
// es una expresión válida, retornando 1.
// Por lo tanto puede ser utilizada en este contexto.

echo $some_var ? 'true': 'false'; // evaluando la expresión primero y luego pasándola a echo

Ejemplo #2 echo no es una expresión

<?php
// Debido a que echo no se comporta como una expresión, el siguiente código es inválido.
($some_var) ? echo 'true' : echo 'false';
?>

Notas

Nota: Puesto que esto es una construcción del lenguaje y no una función, no puede ser llamada usando funciones variables.

Nota: Uso con paréntesis

Rodear un solo argumento de echo con paréntesis no generará un error de sintaxis, y produce una sintaxis similar a una llamada normal de función. Sin embargo, esto puede ser engañoso, ya que los paréntesis son en realidad parte de la expresión que se está mostrando, y no parte de la sintaxis de echo en sí mismo.

Ejemplo #3 Uso de paréntesis

<?php
echo "hola", PHP_EOL;
// muestra "hola"

echo("hola"), PHP_EOL;
// también muestra "hola", ya que ("hola") es una expresión válida

echo(1 + 2) * 3, PHP_EOL;
// muestra "9"; el paréntesis permite que 1+2 sea evaluado primero, luego 3*3
// echo ve el resultado de la expresión como un solo argumento

echo "hola", " mundo", PHP_EOL;
// muestra "hola mundo"

echo("hola"), (" mundo"), PHP_EOL;
// muestra "hola mundo"; los paréntesis son parte de cada expresión
?>

Ejemplo #4 Expresión inválida

<?php
echo("hola", " mundo"), PHP_EOL;
// Genera un error de análisis ya que ("hola", " mundo") no es una expresión válida
?>

Sugerencia

Pasar múltiples argumentos a echo permite evitar complicaciones que aparecen debido a la precedencia de la operación de concatenación en PHP. Por ejemplo, el operador de concatenación tiene una precedencia mayor que el operador ternario, y anteriormente a PHP 8.0.0, tenía la misma precedencia que la suma y la resta:

<?php
// A continuación, la expresión 'Hola ' . isset($name) es evaluada primero,
// y siempre es verdadera, por lo que el argumento para echo siempre es $name
echo 'Hola ' . isset($name) ? $name : 'John Doe' . '!';

// El comportamiento deseado requiere paréntesis adicionales
echo 'Hola ' . (isset($name) ? $name : 'John Doe') . '!';

// En PHP anterior a 8.0.0, lo siguiente muestra "2", en lugar de "Suma: 3"
echo 'Suma: ' . 1 + 2;

// Nuevamente, añadir paréntesis asegura el orden de evaluación deseado
echo 'Suma: ' . (1 + 2);

Si se proporcionan múltiples argumentos, entonces los paréntesis no serán necesarios para aumentar la precedencia, ya que cada expresión está separada:

<?php
echo "Hola ", isset($name) ? $name : "John Doe", "!";

echo
"Suma: ", 1 + 2;

Ver también

add a note

User Contributed Notes 1 note

up
41
pemapmodder1970 at gmail dot com
8 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).
To Top