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"
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)
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.
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)
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).
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://
STREAM_CRYPTO_METHOD_TLS_*
por omisión a TLSv1.0
o TLSv1.1 + TLSv1.2, en lugar de sólo TLSv1.0
Anteriormente, usar gettype() en un recurso cerrado devolvería
un string de "unknown type"
. Ahora, un string de
"resource (closed)"
es devuelto.
Anteriormente, usar is_object() en la clase
__PHP_Incomplete_Class devolvería false
.
Ahora, true
será devuelto.
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.
Las versiones mínimas oficialmente soportadas de Windows son ahora Windows 7/Server 2008 R2.
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.
El soporte para NetWare ha sido eliminado.
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.
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
.
Las funciones hash_hmac(), hash_hmac_file(),
hash_pbkdf2(), y hash_init() (con
HASH_HMAC
) ya no aceptan los no criptográficos
hashes.
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.
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).
sql.safe_mode
La configuración ini sql.safe_mode
ha sido eliminada.
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
.