<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.strings.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
    2 => 'Muestra una string',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'Funciones de strings',
  ),
  'prev' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
  ),
  'next' => 
  array (
    0 => 'function.explode.php',
    1 => 'explode',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/strings/functions/echo.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.echo" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">echo</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">echo</span> &mdash; <span class="dc-title">Muestra una string</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.echo-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>echo</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">...$expressions</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

  <p class="simpara">
   Muestra una o varias expresiones, sin espacios o nueva línea adicionales.
  </p>
  <p class="para">
   <code class="literal">echo</code> no es una función sino una construcción del lenguaje.
   Sus argumentos son una lista de expresiones que siguen la palabra clave <code class="literal">echo</code>,
   separados por comas, y no delimitados por paréntesis.
   A diferencia de otras construcciones del lenguaje, <code class="literal">echo</code>
   no tiene valor de retorno, por lo que no puede ser utilizada en
   el contexto de una expresión.
  </p>
  <p class="para">
   <code class="literal">echo</code> también dispone de una sintaxis corta,
   donde se puede hacer seguir inmediatamente la etiqueta PHP de apertura con un
   signo igual (<code class="literal">=</code>).
   Esta sintaxis está disponible incluso si la directiva de configuración
   <a href="ini.core.php#ini.short-open-tag" class="link"><strong class="option unknown">short_open_tag</strong></a>
   está desactivada.
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000">Tengo <span style="color: #0000BB">&lt;?=$foo?&gt;</span> foo.</span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   La mayor diferencia con <span class="function"><a href="function.print.php" class="function">print</a></span> es que
   <code class="literal">echo</code> acepta múltiples argumentos y no retorna
   ningún valor.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.echo-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">expressions</code></dt>
     <dd>
      <p class="para">
       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
       <a href="language.types.declarations.php#language.types.declarations.strict" class="link"><code class="literal">strict_types</code></a>
       está activada.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.echo-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   No se retorna ningún valor.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.echo-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <code class="literal">echo</code></strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"echo no requiere paréntesis."</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Las strings pueden ser pasadas individualmente como múltiples argumentos o<br />// concatenadas y pasadas como un solo argumento<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Esta '</span><span style="color: #007700">, </span><span style="color: #DD0000">'string '</span><span style="color: #007700">, </span><span style="color: #DD0000">'fue '</span><span style="color: #007700">, </span><span style="color: #DD0000">'creada '</span><span style="color: #007700">, </span><span style="color: #DD0000">'con múltiples parámetros.'</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">'Esta ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'string ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'fue ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'creada ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'con concatenación.' </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ninguna nueva línea o espacio es añadido; lo siguiente muestra "helloworld", todo en una línea<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hola"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"mundo"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Igual que lo anterior<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hola"</span><span style="color: #007700">, </span><span style="color: #DD0000">"mundo"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Esta string abarca<br />múltiples líneas. Los saltos de línea serán<br />mostrados también"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Esta string abarca\nmúltiples líneas. Los saltos de línea serán\nmostrados también."</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// El argumento puede ser cualquier expresión que produzca una string<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">"ejemplo"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"foo es </span><span style="color: #0000BB">$foo</span><span style="color: #DD0000">"</span><span style="color: #007700">; </span><span style="color: #FF8000">// foo es ejemplo<br /><br /></span><span style="color: #0000BB">$frutas </span><span style="color: #007700">= [</span><span style="color: #DD0000">"limón"</span><span style="color: #007700">, </span><span style="color: #DD0000">"naranja"</span><span style="color: #007700">, </span><span style="color: #DD0000">"plátano"</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">" y "</span><span style="color: #007700">, </span><span style="color: #0000BB">$frutas</span><span style="color: #007700">); </span><span style="color: #FF8000">// limón y naranja y plátano<br /><br />// Las expresiones que no son strings son convertidas a strings, incluso si declare(strict_types=1) es utilizado<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">6 </span><span style="color: #007700">* </span><span style="color: #0000BB">7</span><span style="color: #007700">; </span><span style="color: #FF8000">// 42<br /><br />// Sin embargo, los siguientes ejemplos funcionarán:<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">$some_var</span><span style="color: #007700">) ? print </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: print </span><span style="color: #DD0000">'false'</span><span style="color: #007700">; </span><span style="color: #FF8000">// print también es una construcción, pero<br />                                            // es una expresión válida, retornando 1.<br />                                            // Por lo tanto puede ser utilizada en este contexto.<br /><br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$some_var </span><span style="color: #007700">? </span><span style="color: #DD0000">'true'</span><span style="color: #007700">: </span><span style="color: #DD0000">'false'</span><span style="color: #007700">; </span><span style="color: #FF8000">// evaluando la expresión primero y luego pasándola a echo</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 <code class="literal">echo</code> no es una expresión</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Debido a que echo no se comporta como una expresión, el siguiente código es inválido.<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">$some_var</span><span style="color: #007700">) ? echo </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: echo </span><span style="color: #DD0000">'false'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.echo-notes">
  <h3 class="title">Notas</h3>
  <blockquote class="note"><p><strong class="note">Nota</strong>: <span class="simpara">Como esto es una estructura
    del lenguaje, y no una función, no es posible llamarla
    con las <a href="functions.variable-functions.php" class="link">funciones variables</a> o <a href="functions.arguments.php#functions.named-arguments" class="link">argumentos nombrados</a>.
</span></p></blockquote>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Uso con paréntesis</strong><br />
   <p class="para">
    Rodear un solo argumento de <code class="literal">echo</code> 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 <code class="literal">echo</code>
    en sí mismo.
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Uso de paréntesis</strong></p>
     <div class="example-contents">
      <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hola"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// muestra "hola"<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hola"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// también muestra "hola", ya que ("hola") es una expresión válida<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">) * </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// muestra "9"; el paréntesis permite que 1+2 sea evaluado primero, luego 3*3<br />// echo ve el resultado de la expresión como un solo argumento<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hola"</span><span style="color: #007700">, </span><span style="color: #DD0000">" mundo"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// muestra "hola mundo"<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hola"</span><span style="color: #007700">), (</span><span style="color: #DD0000">" mundo"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// muestra "hola mundo"; los paréntesis son parte de cada expresión<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
    <div class="example" id="example-4">
     <p><strong>Ejemplo #4 Expresión inválida</strong></p>
     <div class="example-contents">
     <div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hola"</span><span style="color: #007700">, </span><span style="color: #DD0000">" mundo"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Genera un error de análisis ya que ("hola", " mundo") no es una expresión válida<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>

  <div class="tip"><strong class="tip">Sugerencia</strong>
   <p class="para">
    Pasar múltiples argumentos a <code class="literal">echo</code> 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:
   </p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// A continuación, la expresión 'Hola ' . isset($name) es evaluada primero,<br />// y siempre es verdadera, por lo que el argumento para echo siempre es $name<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hola ' </span><span style="color: #007700">. isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe' </span><span style="color: #007700">. </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// El comportamiento deseado requiere paréntesis adicionales<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hola ' </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe'</span><span style="color: #007700">) . </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// En PHP anterior a 8.0.0, lo siguiente muestra "2", en lugar de "Suma: 3"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Suma: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Nuevamente, añadir paréntesis asegura el orden de evaluación deseado<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Suma: ' </span><span style="color: #007700">. (</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">);</span></span></code></div>
   </div>

   <p class="para">
    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:
   </p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hola "</span><span style="color: #007700">, isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">"John Doe"</span><span style="color: #007700">, </span><span style="color: #DD0000">"!"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Suma: "</span><span style="color: #007700">, </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;</span></span></code></div>
   </div>

  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.echo-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.print.php" class="function" rel="rdfs-seeAlso">print</a> - Muestra un string</span></li>
    <li><span class="function"><a href="function.printf.php" class="function" rel="rdfs-seeAlso">printf()</a> - Muestra una string formateada</span></li>
    <li><span class="function"><a href="function.flush.php" class="function" rel="rdfs-seeAlso">flush()</a> - Vac&iacute;a los b&uacute;feres de salida del sistema</span></li>
    <li><a href="language.types.string.php" class="link">Forma de especificar strings literales</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>