PHP Conference Nagoya 2025

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.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top