Cambios retroincompatibles

Aunque la mayoría del código existente de PHP 5 debería funcionar sin cambios, se ha de tomar nota de algunos cambios retroincompatibles:

Las claves de un array no serán sobrescritas al definir un array como propiedad de una clase mediante un literal de array

Anteriormente, los array declarados como propiedades de clase que mezclaban claves explícita e implícitamente podían tener elementos de array sobrescritos de manera silenciosa si una clave explícita era la misma que una clave implícita secuencial. Por ejemplo:

<?php
class {
    const 
UNO 1;
    public 
$array = [
        
self::UNO => 'foo',
        
'bar',
        
'quux',
    ];
}

var_dump((new C)->array);
?>

Salida del ejemplo anterior en PHP 5.5:

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

Salida del ejemplo anterior en PHP 5.6:

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

Rigurosidad de json_decode()

json_decode() ahora siempre rechaza las variantes que no estén en minúsculas de los literales true, false y null de JSON, según la especificación de JSON, y establece json_last_error() en consecuencia. Anteriormente, json_decode() aceptaba entradas que consistían únicamente en uno de estos valores en mayúsculas o mezclando también minúsculas.

Este cambio solamente afectará a los casos donde hubiera sido pasado JSON no válido a json_decode(): una entrada JSON válida no se verá afectada y continuará siendo interpretada normalmente.

Las envolturas de flujos ahora verifican de manera predeterminada los certificados del par y los nombres de host al usar SSL/TLS

Todos los flujos encriptados de clientes ahora habilitan la verificación del par por omisión. De manera predeterminada se usará el paquete de CA predeterminado de OpenSSL para verificar el certificado del par. En la mayoría de los casos no será necesario realizar ningún cambio para comunicarse con servidores que posean certificados SSL válidos, ya que los distribuidores generalmente configuran OpenSSL para que emplee paquetes de CA bien conocidos.

El paquete de CA podría ser sobrescrito globalmente estableciendo la opción de configuración openssl.cafile u openssl.capath, o en función de cada petición, usando las opciones de contexto cafile o capath.

Aunque no se recomienda en general, es posible deshabilitar la verificación del certificado del par para una petición estableciendo la opción de contexto verify_peer a FALSE, y para deshabilitar la validación del nombre del par estableciendo a FALSE la opción de contexto verify_peer_name.

Los recursos GMP ahora son objetos

Los recursos GMP ahora son objetos. La API funcional implementada en la extensión GMP no ha cambiado, por lo que el código debería ejecutarse sin modificaciones, a menos que se revise en busca de un recurso explícitamente empleando is_resource() o similar.

Las funciones de Mcrypt ahora requieren claves e IV válidos

mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() y mcrypt_ofb() ya no aceptan claves o IV con tamaños incorrectos, por lo que los modos de cifrado de bloques que requieran algún IV fallarán si no se proporciona uno.

Subidas de ficheros de cURL

Las subidas empleando la sintaxis @file ahora requieren que CURLOPT_SAFE_UPLOAD sea establecido a FALSE. Debería utilizarse CURLFile en su lugar.