<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Par&aacute;metros y argumentos de funci&oacute;n',
    2 => 'Par&aacute;metros y argumentos de funci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Las funciones',
  ),
  'prev' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Las funciones definidas por el usuario',
  ),
  'next' => 
  array (
    0 => 'functions.returning-values.php',
    1 => 'Los valores de retorno',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.arguments" class="sect1">
  <h2 class="title">Parámetros y argumentos de función</h2>
  <p class="simpara">
   Los parámetros de la función se declaran en la firma de la función.
   Información puede ser pasada a
   una función utilizando una lista de argumentos, donde cada
   expresión está separada por una coma. Los argumentos serán
   evaluados de izquierda a derecha, y el resultado es asignado a los parámetros de
   la función, antes de que la función sea efectivamente llamada
   (evaluación <em>inmediata</em>).
  </p>
  
  <p class="para">
   PHP soporta el paso de argumentos por valor (comportamiento por defecto), <a href="functions.arguments.php#functions.arguments.by-reference" class="link">el paso por referencia</a>, y <a href="functions.arguments.php#functions.arguments.default" class="link">valores por defecto de argumentos</a>.
   Una <a href="functions.arguments.php#functions.variable-arg-list" class="link">lista de argumentos variable</a>,
   así como los <a href="functions.arguments.php#functions.named-arguments" class="link">Argumentos Nombrados</a>
   también son soportados.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    A partir de PHP 7.3.0, es posible tener una coma final en la lista de argumentos
    para las llamadas de función:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$v </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

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

   <p class="para">
    A partir de PHP 8.0.0, la lista de argumentos de función puede incluir una
    coma final, que será ignorada. Esto es particularmente útil en
    los casos donde la lista de argumentos es larga o contiene nombres de variables
    largos, haciendo práctico listar los argumentos verticalmente.
   </p>
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Lista de parámetros de función con una coma final</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">takes_many_args</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$first_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$second_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$a_very_long_argument_name</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_with_default </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$again </span><span style="color: #007700">= </span><span style="color: #DD0000">'a default string'</span><span style="color: #007700">, </span><span style="color: #FF8000">// Esta coma final no era permitida antes de 8.0.0.<br /></span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  <div class="sect2" id="functions.arguments.by-reference">
   <h3 class="title">Paso de argumentos por referencia</h3>

   <p class="simpara">
    Por defecto, los argumentos son pasados
    a la función por valor (también, cambiar el valor de un argumento en la función no
    cambia su valor fuera de la función). Si se desea que las funciones
    puedan cambiar los valores de los argumentos, estos argumentos deben ser pasados por referencia.
   </p>
   <p class="para">
    Si se desea que un argumento sea siempre pasado
    por referencia, se puede añadir un &#039;&amp;&#039;
    delante del parámetro en la declaración de la función:
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Ejemplo #2 Paso de argumentos de función por referencia</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">add_some_extra</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$string </span><span style="color: #007700">.= </span><span style="color: #DD0000">', y un poco más.'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Esto es un string'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">add_some_extra</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$str</span><span style="color: #007700">; </span><span style="color: #FF8000">// Muestra: 'Esto es un string, y un poco más.'<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Es incorrecto pasar una expresión constante como argumento a un parámetro
    que espera ser pasado por referencia.
   </p>
  </div>

  <div class="sect2" id="functions.arguments.default">
   <h3 class="title">Valores por defecto de parámetros</h3>

   <p class="para">
    Una función puede definir valores por defecto para los parámetros utilizando una sintaxis similar
    a la de la asignación de una variable. El valor por defecto es utilizado únicamente cuando el argumento del parámetro no es
    pasado. Tenga en cuenta que pasar <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> no <em>define</em>
    el valor por defecto.
   </p>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Ejemplo #3 Valor por defecto de argumentos de funciones</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">servir_cafe </span><span style="color: #007700">(</span><span style="color: #0000BB">$type </span><span style="color: #007700">= </span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Servir un </span><span style="color: #0000BB">$type</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(</span><span style="color: #DD0000">"espresso"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Servir un cappuccino.
Servir un .
Servir un espresso.
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Los valores por defecto de parámetros pueden ser valores escalares,
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s, el tipo especial <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, y a partir de PHP 8.1.0,
    objetos utilizando la sintaxis <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new ClassName()</a>.
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Ejemplo #4 Uso de tipo no escalar como valor por defecto</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(</span><span style="color: #0000BB">$types </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">), </span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$device </span><span style="color: #007700">= </span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">) ? </span><span style="color: #DD0000">"las manos" </span><span style="color: #007700">: </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">;<br />    return </span><span style="color: #DD0000">"Preparación de una taza de "</span><span style="color: #007700">.</span><span style="color: #0000BB">join</span><span style="color: #007700">(</span><span style="color: #DD0000">", "</span><span style="color: #007700">, </span><span style="color: #0000BB">$types</span><span style="color: #007700">).</span><span style="color: #DD0000">" con </span><span style="color: #0000BB">$device</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(array(</span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">, </span><span style="color: #DD0000">"lavazza"</span><span style="color: #007700">), </span><span style="color: #DD0000">"una cafetera"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Preparación de una taza de cappuccino con las manos.
Preparación de una taza de cappuccino, lavazza con una cafetera.
</pre></div>
      </div>
    </div>
   </p>
    <p class="para">
      <div class="example" id="example-5">
        <p><strong>Ejemplo #5 Uso de objetos como valores por defecto (a partir de PHP 8.1.0)</strong></p>
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">DefaultCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">'Hacer café.\n'</span><span style="color: #007700">;<br />    }<br />}<br />class </span><span style="color: #0000BB">FancyCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">'Crear un café bonito solo para usted.\n'</span><span style="color: #007700">;<br />    }<br />}<br />function </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= new </span><span style="color: #0000BB">DefaultCoffeeMaker</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">brew</span><span style="color: #007700">();<br />}<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(new </span><span style="color: #0000BB">FancyCoffeeMaker</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>


      <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Hacer café.
Crear un café bonito solo para usted.
</pre></div>
      </div>
      </div>
    </p>
   <p class="simpara">
    El valor por defecto de un argumento debe
    ser obligatoriamente una constante, y no puede ser
    ni una variable, ni un miembro de clase, ni una llamada de función.
   </p>
   <p class="para">
    Tenga en cuenta que todos los parámetros opcionales deben ser especificados después de los
    parámetros obligatorios, de lo contrario no pueden ser omitidos en las llamadas.
    Considere el siguiente código:
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Ejemplo #6 Uso incorrecto de parámetros de función por defecto</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">hacerunyaourt </span><span style="color: #007700">(</span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">, </span><span style="color: #0000BB">$flavour</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Preparar un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yogur a la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">hacerunyaourt</span><span style="color: #007700">(</span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// "framboise" es $container, no $flavour<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function hacerunyaourt(), 1 passed in example.php on line 42
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Ahora comparemos el ejemplo anterior con el siguiente:
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Ejemplo #7 Uso correcto de parámetros de función por defecto</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">hacerunyaourt </span><span style="color: #007700">(</span><span style="color: #0000BB">$flavour</span><span style="color: #007700">, </span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Preparar un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yogur a la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">hacerunyaourt </span><span style="color: #007700">(</span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// "framboise" es $flavour<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Preparar un bol de yogur a la framboise.
</pre></div>
     </div>
    </div>
   </p>
    <p class="para">
      A partir de PHP 8.0.0, los <a href="functions.arguments.php#functions.named-arguments" class="link">argumentos nombrados</a>
      pueden ser utilizados para pasar por alto varios parámetros opcionales.
    </p>
    <p class="para">
     <div class="example" id="example-8">
      <p><strong>Ejemplo #8 Uso correcto de parámetros de función por defecto</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">hacerunyaourt</span><span style="color: #007700">(</span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">, </span><span style="color: #0000BB">$flavour </span><span style="color: #007700">= </span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">, </span><span style="color: #0000BB">$style </span><span style="color: #007700">= </span><span style="color: #DD0000">"Grec"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Preparar un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yogur </span><span style="color: #0000BB">$style</span><span style="color: #DD0000"> a la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">hacerunyaourt</span><span style="color: #007700">(</span><span style="color: #0000BB">style</span><span style="color: #007700">: </span><span style="color: #DD0000">"natural"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Preparar un bol de yogur natural a la framboise.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
      A partir de PHP 8.0.0, declarar parámetros obligatorios después de argumentos opcionales es <em>obsoleto</em>.
      Este problema puede generalmente resolverse abandonando el valor por defecto, ya que nunca será utilizado.
      Una excepción a esta regla concierne a los parámetros de la forma <code class="code">Type $param = null</code>,
      donde el <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> por defecto hace el tipo implicitamente nullable.
      Este uso está deprecado desde PHP 8.4.0, y un
      <a href="language.types.declarations.php#language.types.declarations.nullable" class="link">tipo nullable</a>
      explícito debe ser utilizado en su lugar.
      <div class="example" id="example-9">
       <p><strong>Ejemplo #9 Declaración de parámetros opcionales después de parámetros obligatorios</strong></p>
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">= [], </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}     </span><span style="color: #FF8000">// Valor por defecto no utilizado; desaconsejado a partir de PHP 8.0.0<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}          </span><span style="color: #FF8000">// Funcionalmente equivalente, sin advertencia de deprecación<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">A $a </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {} </span><span style="color: #FF8000">// A partir de PHP 8.1.0, $a es implicitamente requerido<br />                                 // (ya que precede a un parámetro requerido),<br />                                 // pero implicitamente nullable (desaconsejado a partir de PHP 8.4.0),<br />                                 // ya que el valor por defecto del parámetro es null<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(?</span><span style="color: #0000BB">A $a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}       </span><span style="color: #FF8000">// Recomendado<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
    </p>
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <span class="simpara">
        A partir de PHP 7.1.0, la omisión de un parámetro que no especifica un valor por defecto lanza
        un <span class="classname"><a href="class.argumentcounterror.php" class="classname">ArgumentCountError</a></span>;
        en versiones anteriores, esto generaba una advertencia.
      </span>
    </p></blockquote>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Los argumentos pasados por referencia pueden tener
     un valor por defecto.
    </span>
   </p></blockquote>
  </div>

  <div class="sect2" id="functions.variable-arg-list">
   <h3 class="title">Lista de argumentos de número variable</h3>

   <p class="simpara">
    PHP soporta argumentos de número variable en las
    funciones definidas por el usuario utilizando el token
    <code class="literal">...</code>.
   </p>

   <p class="para">
    La lista de argumentos puede incluir el
    token <code class="literal">...</code> para indicar que esta función acepta
    un número variable de argumentos. Los argumentos serán pasados a la variable
    proporcionada en forma de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>:

    <div class="example" id="example-10">
     <p><strong>Ejemplo #10 Uso de <code class="literal">...</code> para acceder a argumentos variables</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(...</span><span style="color: #0000BB">$numbers</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$acc </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$numbers </span><span style="color: #007700">as </span><span style="color: #0000BB">$n</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$acc </span><span style="color: #007700">+= </span><span style="color: #0000BB">$n</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$acc</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">sum</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 style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
10
</pre></div>
     </div>
    </div>
   </p>

   <p class="para">
    <code class="literal">...</code> también puede ser utilizado durante las llamadas de
    funciones para extraer el <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o la variable
    <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> o el literal en la lista de argumentos:

    <div class="example" id="example-11">
     <p><strong>Ejemplo #11 Uso de <code class="literal">...</code> para proporcionar argumentos</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">add</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 style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </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 />echo </span><span style="color: #0000BB">add</span><span style="color: #007700">(...</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
3
3
</pre></div>
     </div>
    </div>
   </p>

   <p class="para">
    Se pueden especificar parámetros clásicos antes de la palabra clave
    <code class="literal">...</code>. En este caso, solo los argumentos finales
    que no coincidan con un argumento clásico serán añadidos
    al array generado por <code class="literal">...</code>.
   </p>

   <p class="para">
    También es posible añadir una
    <a href="language.types.declarations.php" class="link">declaración de tipo</a>
    antes del token <code class="literal">...</code>. Si esto está presente,
    entonces todos los argumentos capturados por <code class="literal">...</code>
    deben coincidir con el tipo de parámetro.

    <div class="example" id="example-12">
     <p><strong>Ejemplo #12 Conversión de argumentos variables</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #0000BB">$unit</span><span style="color: #007700">, </span><span style="color: #0000BB">DateInterval </span><span style="color: #007700">...</span><span style="color: #0000BB">$intervals</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$time </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$intervals </span><span style="color: #007700">as </span><span style="color: #0000BB">$interval</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$time </span><span style="color: #007700">+= </span><span style="color: #0000BB">$interval</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$unit</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$time</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P1D'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P2D'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">).</span><span style="color: #DD0000">' días'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Esto fallará, ya que null no es un objeto DateInterval.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
3 días
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
</pre></div>
     </div>
    </div>
   </p>

   <p class="para">
    Finalmente, se pueden pasar argumentos variables
    <a href="functions.arguments.php#functions.arguments.by-reference" class="link">por referencia</a>
    prefijando la palabra clave <code class="literal">...</code> con un comercial
    (<code class="literal">&amp;</code>).
   </p>

  </div>

  <div class="sect2" id="functions.named-arguments">
   <h3 class="title">Argumentos Nombrados</h3>

   <p class="para">
    PHP 8.0.0 introduce los argumentos nombrados como extensión a los parámetros
    posicionales existentes. Los argumentos nombrados permiten pasar los
    argumentos a una función basándose en el nombre del parámetro, en lugar de
    la posición del parámetro. Esto documenta automáticamente el significado
    del argumento, hace que el orden de los argumentos sea independiente y permite
    omitir valores por defecto arbitrariamente.
   </p>

   <p class="para">
    Los argumentos nombrados se pasan prefijando el valor con el nombre del
    parámetro seguido de dos puntos. Utilizar palabras clave reservadas como
    nombre de parámetro está permitido. El nombre del parámetro debe ser un identificador,
    no se permite especificarlo de forma dinámica.
   </p>

   <div class="example" id="example-13">
    <p><strong>Ejemplo #13 Sintaxis de argumentos nombrados</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />myFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">paramName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">array_foobar</span><span style="color: #007700">(array: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// NO soportado.<br /></span><span style="color: #0000BB">function_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$variableStoringParamName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-14">
    <p><strong>Ejemplo #14 Argumentos posicionales comparados con argumentos nombrados</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Utilizando argumentos posicionales:<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Utilizando argumentos nombrados:<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    El orden en el que se pasan los argumentos nombrados no importa.
   </p>

   <div class="example" id="example-15">
    <p><strong>Ejemplo #15 Mismo ejemplo que arriba, pero con un orden de parámetro diferente</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Los argumentos nombrados pueden ser combinados con los argumentos posicionales.
    En este caso, los argumentos nombrados deben venir después de los argumentos posicionales.
    También es posible especificar solo algunos de los argumentos opcionales
    de una función, independientemente de su orden.
   </p>

   <div class="example" id="example-16">
    <p><strong>Ejemplo #16 Combinar argumentos nombrados con argumentos posicionales</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">double_encode</span><span style="color: #007700">: </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Igual que<br /></span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">ENT_QUOTES </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_SUBSTITUTE </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_HTML401</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Pasar el mismo argumento varias veces resulta en una
    <span class="classname"><a href="class.error.php" class="classname">Error</a></span> excepción.
   </p>

   <div class="example" id="example-17">
    <p><strong>Ejemplo #17 Error lanzado cuando un argumento es pasado varias veces al mismo parámetro nombrado</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">) { ... }<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

    <p class="para">
      A partir de PHP 8.1.0, es posible utilizar argumentos nombrados después de descomponer los argumentos.
      Un argumento nombrado <em>no debe</em> sobrescribir un argumento ya descompuesto.
    </p>

    <div class="example" id="example-18">
      <p><strong>Ejemplo #18 Utilizar argumentos nombrados después de la descomposición</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">) {<br />  return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b </span><span style="color: #007700">+ </span><span style="color: #0000BB">$c </span><span style="color: #007700">+ </span><span style="color: #0000BB">$d</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</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 style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #DD0000">'b' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</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 style="color: #0000BB">b</span><span style="color: #007700">: </span><span style="color: #0000BB">20</span><span style="color: #007700">)); </span><span style="color: #FF8000">// Error fatal. El parámetro nombrado $b sobrescribe el argumento anterior.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

    </div>

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