Anteriormente, era posible que la función
number_format() devolviera -0
.
Aunque esto es perfectamente válido según la norma "IEEE 754
floating point specification", esta rareza no era deseable
para la visualización de números formateados en una forma legible por el ser humano.
<?php
var_dump(number_format(-0.01)); // ahora muestra string(1) "0" en lugar de string(2) "-0"
Las claves numéricas ahora son mejor manejadas durante el casting de un array a un objeto y de un objeto a un array (casting explícito o por la función settype()).
Esto significa que las claves representadas por un entero (o un entero en forma de texto) de un array convertido en objeto ahora son accesibles:
<?php
// array a objeto
$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"]=> // ahora clave de texto en lugar de clave entera int(1) } int(1) int(1)
Y las claves en formato entero (o entero en forma de texto) de objetos convertidos en arrays ahora son accesibles:
<?php
// objeto a 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]=> // ahora clave entera en lugar de clave de texto int(1) } int(1) int(1)
null
a get_class()
Anteriormente, pasar null
a la función get_class()
devolvía el nombre de la clase en curso. Este comportamiento ha sido eliminado,
se muestra un error E_WARNING
en su lugar.
Para recuperar el mismo comportamiento que antes, el argumento debería
simplemente ser eliminado.
Se emitirá un E_WARNING
al intentar
utilizar la función count() en un
tipo no contable (esto incluye la función alias
sizeof()).
<?php
var_dump(
count(null), // NULL no es contable
count(1), // un entero no es contable
count('abc'), // un string no es contable
count(new stdClass), // un objeto que no implementa la interfaz Countable no es contable
count([1,2]) // un array es contable
);
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)
En el marco de la migración a largo plazo de los recursos, la extensión Hash ha sido actualizada para utilizar los objetos en lugar de recursos. El cambio debería ser transparente para los desarrolladores PHP, excepto donde se hayan realizado verificaciones con is_resource() (será necesario reemplazar por is_object()).
Se han realizado las siguientes modificaciones respecto a los valores por defecto:
tls://
ahora por defecto TLSv1.0 o TLSv1.1 o TLSv1.2
ssl://
es un alias de tls://
STREAM_CRYPTO_METHOD_TLS_*
constantes por defecto de
TLSv1.0 o TLSv1.1 + TLSv1.2, en lugar de solo TLSv1.0.
Anteriormente, el uso de gettype() en un recurso
cerrado devolvía una cadena "unknown type"
. Ahora,
la cadena "resource (closed)"
será devuelta.
Anteriormente, el uso de is_object() en la clase
__PHP_Incomplete_Class devolvía false
.
Ahora, true
será devuelto.
Las referencias no cualificadas a constantes no definidas ahora generarán
un E_WARNING
(en lugar de un E_NOTICE
).
En la próxima versión mayor de PHP, generarán una excepción
Error.
Las versiones mínimas oficialmente soportadas para Windows son Windows 7/ Server 2008 R2.
Los controles de compatibilidad en los valores por defecto de las propiedades de trait ya no realizarán la conversión.
object
para los nombres de clases
El nombre object
estaba anteriormente soft-reservado en PHP 7.0.
Ahora está reservado, prohibiendo su uso como nombre de clase, trait o interfaz.
El soporte de NetWare ha sido eliminado.
SORT_STRING
Mientras que array_unique() con SORT_STRING
anteriormente copiaba el array y eliminaba elementos no únicos
(sin envolver el array después), ahora se construye un nuevo array añadiendo los elementos únicos.
Esto puede resultar en índices numéricos diferentes.
La función bcmod() ya no trunca los números
fraccionarios a 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
.
Las funciones hash_hmac(), hash_hmac_file(),
hash_pbkdf2(), y hash_init() (con
HASH_HMAC
) ya no aceptan hachages no criptográficos.
La opción JSON_OBJECT_AS_ARRAY
de la función
json_decode() ahora se utiliza si el segundo parámetro
(assoc) es null
. Anteriormente JSON_OBJECT_AS_ARRAY
siempre fue ignorado.
Las secuencias generadas por rand() y mt_rand() para casos específicos pueden diferir de PHP 7.1 en máquinas de 64 bits (debido a la corrección de un error en la implementación de la polarización del módulo).
sql.safe_mode
El parámetro INI sql.safe_mode
ha sido eliminado.
El elemento de zone
del array devuelto por date_parse() y
date_parse_from_format() representa segundos en lugar de
minutos, y su signo está invertido. Por ejemplo, -120
ahora es
7200
.
Desde PHP 7.2.34, los nombres de las cookies entrantes ya no se decodifican URL por razones de seguridad.