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

contributors($setup);

?>
<div id="migration56.incompatible" class="sect1">
 <h2 class="title">Cambios incompatibles con versiones anteriores</h2>
 <p class="simpara">
  Aunque la mayoría del código PHP 5 existente debería funcionar sin ninguna
  modificación, debe tener en cuenta algunas incompatibilidades ascendentes:
 </p>

 <div class="sect2" id="migration56.incompatible.array-keys">
  <h3 class="title">Las claves de los arreglos no se sobrescriben al definir un arreglo como una
   propiedad de una clase a través de un literal de arreglo</h3>

  <p class="para">
   Anteriormente, los arreglos declarados como propiedades de clase que mezclaban
   claves explícitas e implícitas podían ver sus elementos sobrescritos sin
   advertencia si una clave explícita era idéntica a una clave secuencial
   implícita. Por ejemplo:
  </p>

  <div class="informalexample">
   <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">C </span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">ONE </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$array </span><span style="color: #007700">= [<br />        </span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">ONE </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'quux'</span><span style="color: #007700">,<br />    ];<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((new </span><span style="color: #0000BB">C</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Resultado del ejemplo anterior en PHP 5.5:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [0]=&gt;
  string(3) &quot;bar&quot;
  [1]=&gt;
  string(4) &quot;quux&quot;
}

</pre></div>
   </div>
   <p class="para">Resultado del ejemplo anterior en PHP 5.6:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(3) {
  [1]=&gt;
  string(3) &quot;foo&quot;
  [2]=&gt;
  string(3) &quot;bar&quot;
  [3]=&gt;
  string(4) &quot;quux&quot;
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration56.incompatible.json-decode">
  <h3 class="title">Rigurosidad de <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span></h3>

  <p class="para">
   <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> ahora rechaza las variantes no escritas en
   minúscula de los literales JSON <code class="literal">true</code>,
   <code class="literal">false</code> y <code class="literal">null</code>, de acuerdo con la
   especificación JSON, y <span class="function"><a href="function.json-last-error.php" class="function">json_last_error()</a></span> se informa en
   consecuencia. Anteriormente, los valores pasados a
   <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> que contenían alguno de estos valores en
   mayúsculas o en una combinación de mayúsculas y minúsculas eran aceptados.
  </p>

  <p class="para">
   Este cambio solo afectará a los casos en los que se pase JSON inválido a
   <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span>: el JSON válido no se verá afectado y se
   analizará normalmente.
  </p>
 </div>

 <div class="sect2" id="migration56.incompatible.peer-verification">
  <h3 class="title">
   Los manejadores de flujo ahora verifican por defecto los certificados de par y
   los nombres de host al usar SSL/TLS
  </h3>

  
<p class="para">
    Todos los flujos clientes cifrados activan ahora la verificación por pares por omisión.
    Por omisión, esto utilizará el CA OpenSSL por omisión para verificar el par
    de certificados. En la mayoría de los casos, no se necesita realizar ninguna modificación
    para comunicarse con servidores y certificados SSL válidos, sabiendo que los distribuidores
    configuran generalmente OpenSSL para utilizar los CA conocidos.
</p>

<p class="para">
    El CA por omisión puede ser sobrescrito a nivel global utilizando las
    opciones de configuración openssl.cafile o openssl.capath, o mediante una solicitud
    básica utilizando las opciones de contexto
    <a href="context.ssl.php#context.ssl.cafile" class="link"><code class="parameter">cafile</code></a> o
    <a href="context.ssl.php#context.ssl.capath" class="link"><code class="parameter">capath</code></a>.
</p>

<p class="para">
    Aunque no se recomienda en general, es posible desactivar la
    verificación de certificados por pares para una solicitud definiendo la
    opción de contexto <a href="context.ssl.php#context.ssl.verify-peer" class="link"><code class="parameter">verify_peer</code></a>
    a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, y para desactivar la validación del nombre de los pares, configurando
    la opción de contexto
    <a href="context.ssl.php#context.ssl.verify-peer-name" class="link"><code class="parameter">verify_peer_name</code></a>
    a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
</p>

 </div>

 <div class="sect2" id="migration56.incompatible.gmp">
  <h3 class="title">Los recursos <a href="book.gmp.php" class="link">GMP</a> ahora son objetos</h3>

  <p class="para">
   Los recursos <a href="book.gmp.php" class="link">GMP</a> ahora son objetos.
   La API de la extensión GMP no ha cambiado y el código existente debería
   continuar funcionando sin modificación a menos que se realice una verificación
   explícita usando <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> o equivalente.
  </p>
 </div>

 <div class="sect2" id="migration56.incompatible.mcrypt">
  <h3 class="title">Las funciones <a href="book.mcrypt.php" class="link">Mcrypt</a> ahora requieren claves o IV válidos</h3>

  <p class="para">
   <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span>, <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span>,
   <span class="function"><strong>mcrypt_cbc()</strong></span>, <span class="function"><strong>mcrypt_cfb()</strong></span>,
   <span class="function"><strong>mcrypt_ecb()</strong></span>, <span class="function"><a href="function.mcrypt-generic.php" class="function">mcrypt_generic()</a></span> y
   <span class="function"><strong>mcrypt_ofb()</strong></span> ya no aceptan claves o vectores de
   inicialización (IVs) de tamaños incorrectos, y los modos de cifrado por bloques
   que requieren IVs fallarán ahora si no se proporciona un IV.
  </p>
 </div>

 <div class="sect2" id="migration56.incompatible.curl">
  <h3 class="title">Descarga de archivos con <a href="book.curl.php" class="link">cURL</a></h3>

  <p class="para">
   La descarga de archivos usando la sintaxis @file ahora requiere que la
   directiva CURLOPT_SAFE_UPLOAD esté definida como <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   <span class="classname"><a href="class.curlfile.php" class="classname">CURLFile</a></span> debe ser usado en su lugar.
  </p>
 </div>

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