## Cambios incompatibles hacia atrás

### Evitar que number_format() devuelva el cero negativo

Anteriormente, era posible que la función number_format() devolviera `-0`. Aunque esto es perfectamente válido de acuerdo con la especificación de punto flotante IEEE 754, esta peculiaridad no era deseable para mostrar los números formateados en una forma legible para los humanos.

`<?php
var_dump(number_format(-0.01)); // now outputs string(1) "0" instead of string(2) "-0"`

### Convertir las claves numéricas de objetos y arrays

Las claves numéricas ahora se manejan mejor cuando se hacen arrays de objetos y objetos en arrays (ya sea de un modo explícito o por settype()).

Esto significa que las claves de números integer (o números integer en string) de los array que están siendo lanzados a los objetos son ahora accesibles:

`<?php
// array to object
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
$obj,
$obj->{'0'}, // ahora accesible
$obj->{0} // ahora accesible
);`

El resultado del ejemplo sería:

    object(stdClass)#1 (1) {
      ["0"]=>    // la clave string ahora, en lugar de la clave de los números integer
      int(1)
    }
    int(1)
    int(1)

Y las claves de números enteros (o string de números enteros) de los objetos que están siendo lanzados a los array son ahora accesibles:

`<?php
// object to array
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array)$obj;
var_dump(
$arr,
$arr[0], // ahora accesible
$arr['0'] // ahora accesible
);`

El resultado del ejemplo sería:

    array(1) {
      [0]=>    // clave integer ahora, en lugar de la clave de string
      int(1)
    }
    int(1)
    int(1)

### No se permite pasar `null` a get_class()

Anteriormente, pasar `null` a la función get_class() daría a conocer el nombre de la clase adjunta. Este comportamiento ya ha sido eliminado, donde se emitirá un `E_WARNING` en su lugar. Para lograr el mismo comportamiento que antes, el argumento debe ser simplemente omitido.

### Advertencia al contar los tipos no contables

Una advertencia `E_WARNING` se emitirá ahora cuando se intente contar (count()) tipos no contables (esto incluye la función alias sizeof()).

`<?php
var_dump(
count(null), // NULL si no es contable
count(1), // integers no son contables
count('abc'), // strings no son contables
count(new stdclass), // objetos que no implementen la interfaz Countable no son contables
count([1,2]) // arrays son contables
);`

El resultado del ejemplo sería:

    Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

    Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

    Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

    Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
    int(0)
    int(1)
    int(1)
    int(1)
    int(2)

### Mover ext/hash de los recursos a los objetos

Como parte de la migración a largo plazo lejos de los recursos, la extensión Hash se ha actualizado para utilizar objetos en lugar de recursos. El cambio debería ser perfecto para los desarrolladores de PHP, excepto cuando is_resource() ha hecho comprobaciones (que necesitará ser actualizado a is_object() en su lugar).

### Mejorar los valores por omisión de SSL/TLS

Se han hecho los siguientes cambios a los valores predeterminados:

- `tls://` ahora por omisión a TLSv1.0 o TLSv1.1 o TLSv1.2
- `ssl://` un alias de `tls://`
- Las constantes `STREAM_CRYPTO_METHOD_TLS_*` por omisión a TLSv1.0 o TLSv1.1 + TLSv1.2, en lugar de sólo TLSv1.0

### gettype() devolviendo valores en recursos cerrados

Anteriormente, usar gettype() en un recurso cerrado devolvería un string de `"unknown type"`. Ahora, un string de `"resource (closed)"` es devuelto.

### is_object() y __PHP_Incomplete_Class

Anteriormente, usar is_object() en la clase __PHP_Incomplete_Class devolvería `false`. Ahora, `true` será devuelto.

### Promover el nivel de error de las constantes no definidas

Las referencias no cualificadas a constantes no definidas generarán ahora una advertencia `E_WARNING` (en vez de una `E_NOTICE`). En la próxima versión principal de PHP, generarán excepciones Error.

### Soporte de Windows

Las versiones mínimas oficialmente soportadas de Windows son ahora Windows 7/Server 2008 R2.

### Comprobación de los valores de propiedad predeterminados de los rasgos (traits)

Las comprobaciones de compatibilidad de los valores de propiedad de los rasgos por omisión ya no se realizarán.

### `object` para los nombres de las clases

El nombre `object` fue previamente reservado en PHP 7.0. Esto ahora se ha reservado con fuerza, prohibiendo su uso como nombre de clase, rasgo o nombre de interfaz.

### Soporte de NetWare

El soporte para NetWare ha sido eliminado.

### array_unique() con `SORT_STRING`

Mientras que array_unique() con `SORT_STRING` antes copiaba el array y eliminaba los elementos no únicos (sin empaquetar el array después), ahora se construye un nuevo array añadiendo los elementos únicos. Esto puede dar lugar a diferentes índices numéricos.

### Cambios con floats en la función bcmod()

La función bcmod() ya no trunca números fraccionarios a números enteros. Como tal, su comportamiento ahora sigue fmod(), en lugar del operador `%`. Por ejemplo `bcmod('4', '3.5')` ahora devuelve `0.5` en lugar de `1`.

### Funciones de hash y hash no criptográficas

Las funciones hash_hmac(), hash_hmac_file(), hash_pbkdf2(), y hash_init() (con `HASH_HMAC`) ya no aceptan los no criptográficos hashes.

### Opciones de la función json_decode()

La opción de la función json_decode(), `JSON_OBJECT_AS_ARRAY`, es ahora usada si el segundo parámetro (asociativo) es `null`. Anteriormente, `JSON_OBJECT_AS_ARRAY` siempre fue ignorado.

### Salida de rand() y mt_rand()

secuencias generadas por rand() y mt_rand() para una semilla específica puede diferir de PHP 7.1 en máquinas de 64 bits (debido a la fijación de un error de sesgo de módulo en la aplicación).

### La eliminación de la configuración ini `sql.safe_mode`

La configuración ini `sql.safe_mode` ha sido eliminada.

### Cambios a las funciones date_parse() y date_parse_from_format()

El elemento `zone` de el array devuelto por las funciones date_parse() y date_parse_from_format() ahora representan segundos en vez de minutos, y su signo está invertido. Por ejemplo `-120` es ahora `7200`.