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"]=> 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]=> 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
.