<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration71.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'migration71.new-features.php',
    1 => 'Nuevas caracter&iacute;sticas',
    2 => 'Nuevas caracter&iacute;sticas',
  ),
  'up' => 
  array (
    0 => 'migration71.php',
    1 => 'Migraci&oacute;n de PHP 7.0.x a PHP 7.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration71.php',
    1 => 'Migraci&oacute;n de PHP 7.0.x a PHP 7.1.x',
  ),
  'next' => 
  array (
    0 => 'migration71.new-functions.php',
    1 => 'Nuevas funciones',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'appendices/migration71/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration71.new-features" class="sect1">
 <h2 class="title">Nuevas características</h2>

 <div class="sect2" id="migration71.new-features.nullable-types">
  <h3 class="title">Tipos nullables</h3>

  <p class="para">
   La declaración de los tipos de parámetro y de valor de retorno ahora
   se puede marcar como nullable prefijando el nombre del tipo con un signo
   de interrogación. Esto significa que tanto el tipo especificado como <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> se pueden pasar como argumento,
   o devolver como valor, respectivamente.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #007700">function </span><span style="color: #0000BB">testReturnA</span><span style="color: #007700">(): ?</span><span style="color: #0000BB">string
</span><span style="color: #007700">{
    return </span><span style="color: #DD0000">'elePHPant'</span><span style="color: #007700">;
}

</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">testReturnA</span><span style="color: #007700">());

function </span><span style="color: #0000BB">testReturnB</span><span style="color: #007700">(): ?</span><span style="color: #0000BB">string
</span><span style="color: #007700">{
    return </span><span style="color: #0000BB">null</span><span style="color: #007700">;
}

</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">testReturnB</span><span style="color: #007700">());

function </span><span style="color: #0000BB">test</span><span style="color: #007700">(?</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)
{
    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #DD0000">'elePHPant'</span><span style="color: #007700">);
</span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);
</span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(9) &quot;elePHPant&quot;
NULL
string(9) &quot;elePHPant&quot;
NULL
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in...
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.void-functions">
  <h3 class="title">Funciones void</h3>

  <p class="para">
   Se ha introducido el tipo de retorno <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>. Las funciones declaradas
   con un tipo de retorno void deben omitir la declaración de retorno completamente,
   o utilizar una declaración de retorno vacía. <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> no es un tipo de retorno válido para una
   función void.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">swap</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$left</span><span style="color: #007700">, &amp;</span><span style="color: #0000BB">$right</span><span style="color: #007700">): </span><span style="color: #0000BB">void
</span><span style="color: #007700">{
    if (</span><span style="color: #0000BB">$left </span><span style="color: #007700">=== </span><span style="color: #0000BB">$right</span><span style="color: #007700">) {
        return;
    }

    </span><span style="color: #0000BB">$tmp </span><span style="color: #007700">= </span><span style="color: #0000BB">$left</span><span style="color: #007700">;
    </span><span style="color: #0000BB">$left </span><span style="color: #007700">= </span><span style="color: #0000BB">$right</span><span style="color: #007700">;
    </span><span style="color: #0000BB">$right </span><span style="color: #007700">= </span><span style="color: #0000BB">$tmp</span><span style="color: #007700">;
}

</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">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">swap</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">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">);</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
null
int(2)
int(1)
</pre></div>
   </div>
  </div>

  <p class="para">
   Intentar utilizar el valor de retorno de una función void simplemente evalúa
   a <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, sin advertencia emitida. La razón para esto es que una advertencia
   implicaría el uso de una función genérica de orden superior.
  </p>
 </div>

 <div class="sect2" id="migration71.new-features.symmetric-array-destructuring">
  <h3 class="title">Desestructuración simétrica de arrays</h3>

  <p class="para">
   La abreviatura de la sintaxis array <code class="literal">[]</code> ahora se puede utilizar
   para desestructurar arrays en asignaciones (incluyendo
   dentro de <code class="literal">foreach</code>), en lugar de la sintaxis
   existente <span class="function"><a href="function.list.php" class="function">list()</a></span>, que se sigue admitiendo.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$data </span><span style="color: #007700">= [
    [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'Tom'</span><span style="color: #007700">],
    [</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'Fred'</span><span style="color: #007700">],
];

</span><span style="color: #FF8000">// list() style
</span><span style="color: #007700">list(</span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #0000BB">$name1</span><span style="color: #007700">) = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];

</span><span style="color: #FF8000">// [] style
</span><span style="color: #007700">[</span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #0000BB">$name1</span><span style="color: #007700">] = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];

</span><span style="color: #FF8000">// list() style
</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as list(</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">)) {
    </span><span style="color: #FF8000">// lógica aquí con $id y $name
</span><span style="color: #007700">}

</span><span style="color: #FF8000">// [] style
</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as [</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {
    </span><span style="color: #FF8000">// lógica aquí con $id y $name
</span><span style="color: #007700">}</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.class-constant-visibility">
  <h3 class="title">Visibilidad de las constantes de clase</h3>

  <p class="para">
   Se ha añadido soporte para especificar la visibilidad de las constantes de clase.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">class </span><span style="color: #0000BB">ConstDemo
</span><span style="color: #007700">{
    const </span><span style="color: #0000BB">PUBLIC_CONST_A </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;
    public const </span><span style="color: #0000BB">PUBLIC_CONST_B </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;
    protected const </span><span style="color: #0000BB">PROTECTED_CONST </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;
    private const </span><span style="color: #0000BB">PRIVATE_CONST </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;
}</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.iterable-pseudo-type">
  <h3 class="title">El pseudo-tipo <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></h3>

  <p class="para">
   Se ha introducido un nuevo pseudo-tipo (similar a
   <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>) llamado <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span>. Se puede utilizar con los parámetros y retornos
   tipados, donde acepta arrays u objetos que implementan la interfaz <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>. En cuanto
   a la subtipificación, los tipos de parámetros de
   las clases hijas pueden ampliar una declaración de un padre de <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o
   <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> en <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span>. Con los tipos de retorno,
   las clases hijas pueden restringir el tipo de retorno <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span> del padre
   en <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o un objeto que implemente <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">iterator</span><span style="color: #007700">(</span><span style="color: #0000BB">iterable $iter</span><span style="color: #007700">)
{
    foreach (</span><span style="color: #0000BB">$iter </span><span style="color: #007700">as </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {
        </span><span style="color: #FF8000">//
    </span><span style="color: #007700">}
}</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.mulit-catch-exception-handling">
  <h3 class="title">Captura de múltiples excepciones (Multi-catch)</h3>

  <p class="para">
   Ahora pueden especificarse múltiples excepciones por bloque catch utilizando el carácter
   barra vertical (<code class="literal">|</code>). Esto es útil cuando
   diferentes excepciones se manejan de la misma manera.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">try {
    </span><span style="color: #FF8000">// código
</span><span style="color: #007700">} catch (</span><span style="color: #0000BB">FirstException </span><span style="color: #007700">| </span><span style="color: #0000BB">SecondException $e</span><span style="color: #007700">) {
    </span><span style="color: #FF8000">// maneja las excepciones first y second
</span><span style="color: #007700">}</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-keys-in-list">
  <h3 class="title">Soporte de claves en <span class="function"><a href="function.list.php" class="function">list()</a></span></h3>

  <p class="para">
   Ahora es posible especificar claves en <span class="function"><a href="function.list.php" class="function">list()</a></span>, o su nueva sintaxis abreviada <code class="literal">[]</code>.
   Esto permite la desestructuración de arrays que tienen claves
   no enteras o no secuenciales.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$data </span><span style="color: #007700">= [
    [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Tom'</span><span style="color: #007700">],
    [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Fred'</span><span style="color: #007700">],
];

</span><span style="color: #FF8000">// list() style
</span><span style="color: #007700">list(</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name1</span><span style="color: #007700">) = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];

</span><span style="color: #FF8000">// [] style
</span><span style="color: #007700">[</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name1</span><span style="color: #007700">] = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];

</span><span style="color: #FF8000">// list() style
</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as list(</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name</span><span style="color: #007700">)) {
    </span><span style="color: #FF8000">// lógica aquí con $id y $name
</span><span style="color: #007700">}

</span><span style="color: #FF8000">// [] style
</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {
    </span><span style="color: #FF8000">// lógica aquí con $id y $name
</span><span style="color: #007700">}</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-negative-string-offsets">
  <h3 class="title">Soporte para índices de string negativos</h3>

  <p class="para">
   Se ha añadido soporte para índices de string negativos a las
   <a href="book.strings.php" class="link">funciones de manipulación
   de strings</a> que aceptan una posición, así
   como a la <a href="language.types.string.php#language.types.string.substr" class="link">indexación de strings</a> con <code class="literal">[]</code> o <code class="literal">{}</code>. En tales
   casos, un índice negativo se interpreta como un desplazamiento desde el final del string.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"abcdef"</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #DD0000">"aabbcc"</span><span style="color: #007700">, </span><span style="color: #DD0000">"b"</span><span style="color: #007700">, -</span><span style="color: #0000BB">3</span><span style="color: #007700">));</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
string (1) &quot;e&quot;
int(3)
</pre></div>
   </div>
  </div>

  <p class="para">
   Los desplazamientos de string negativos también se admiten con la sintaxis
   simple de análisis en strings.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;
echo </span><span style="color: #DD0000">"El último carácter de '</span><span style="color: #0000BB">$string</span><span style="color: #DD0000">' es '</span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000">'.\n"</span><span style="color: #007700">;
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
El último carácter de &#039;bar&#039; es &#039;r&#039;.
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-aead-in-ext-openssl">
  <h3 class="title">Soporte para AEAD en ext/openssl</h3>

  <p class="para">
   Se ha añadido soporte para AEAD (modos GCM y CCM) ampliando las
   funciones <span class="function"><a href="function.openssl-encrypt.php" class="function">openssl_encrypt()</a></span>
   y <span class="function"><a href="function.openssl-decrypt.php" class="function">openssl_decrypt()</a></span> con parámetros adicionales.
  </p>
 </div>

 <div class="sect2" id="migration71.new-features.convert-callables-to-closures">
  <h3 class="title">Convertir callables en <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>s con <span class="methodname"><a href="closure.fromcallable.php" class="methodname">Closure::fromCallable()</a></span></h3>

  <p class="para">
   Se ha introducido un nuevo método estático en la clase
   <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span> para permitir que los <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>s se conviertan fácilmente en
   objetos <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">class </span><span style="color: #0000BB">Test
</span><span style="color: #007700">{
    public function </span><span style="color: #0000BB">exposeFunction</span><span style="color: #007700">()
    {
        return </span><span style="color: #0000BB">Closure</span><span style="color: #007700">::</span><span style="color: #0000BB">fromCallable</span><span style="color: #007700">([</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">'privateFunction'</span><span style="color: #007700">]);
    }

    private function </span><span style="color: #0000BB">privateFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">)
    {
        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">);
    }
}

</span><span style="color: #0000BB">$privFunc </span><span style="color: #007700">= (new </span><span style="color: #0000BB">Test</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">exposeFunction</span><span style="color: #007700">();
</span><span style="color: #0000BB">$privFunc</span><span style="color: #007700">(</span><span style="color: #DD0000">'some value'</span><span style="color: #007700">);</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(10) &quot;some value&quot;
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.asynchronous-signal-handling">
  <h3 class="title">Gestión de señales asíncronas</h3>

  <p class="para">
   Se ha introducido una nueva función llamada <span class="function"><a href="function.pcntl-async-signals.php" class="function">pcntl_async_signals()</a></span>
   para permitir la gestión de señales asíncronas sin utilizar los ticks
   (lo que introducía mucho sobrecosto).
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
pcntl_async_signals</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">); </span><span style="color: #FF8000">// activar las señales asíncronas

</span><span style="color: #0000BB">pcntl_signal</span><span style="color: #007700">(</span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">,  function(</span><span style="color: #0000BB">$sig</span><span style="color: #007700">) {
    echo </span><span style="color: #DD0000">"SIGHUP\n"</span><span style="color: #007700">;
});

</span><span style="color: #0000BB">posix_kill</span><span style="color: #007700">(</span><span style="color: #0000BB">posix_getpid</span><span style="color: #007700">(), </span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">);</span></code></pre></div>
   </div>

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

 <div class="sect2" id="migration71.new-features.http2-server-push-support-in-ext-curl">
  <h3 class="title">Soporte para HTTP/2 Server Push en ext/curl</h3>

  <p class="para">
   Se ha añadido soporte para HTTP/2 Server Push a la extensión cURL (requiere la
   versión 7.46 o posterior). Esto se puede aprovechar a través de
   la función <span class="function"><a href="function.curl-multi-setopt.php" class="function">curl_multi_setopt()</a></span> con la nueva
   constante <strong><code><a href="curl.constants.php#constant.curlmopt-pushfunction">CURLMOPT_PUSHFUNCTION</a></code></strong>. También se
   han añadido las constantes <strong><code><a href="curl.constants.php#constant.curl-push-ok">CURL_PUSH_OK</a></code></strong> y <strong><code><a href="curl.constants.php#constant.curl-push-deny">CURL_PUSH_DENY</a></code></strong>
   para que se pueda aprobar o rechazar la ejecución de la función de retrollamada de
   HTTP/2 Server Push.
  </p>
 </div>

 <div class="sect2" id="migration71.new-features.stream-context-options">
  <h3 class="title">Opciones del contexto de flujo (Stream Context Options)</h3>

  <p class="para">
   Se ha añadido la opción
   del contexto de flujo <a href="context.socket.php#context.socket.tcp_nodelay" class="link">tcp_nodelay</a>.
  </p>
 </div>

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