CakeFest 2024: The Official CakePHP Conference

Cambios incompatibles con el pasado

Núcleo PHP

Interpretación de la etiqueta final Heredoc/Nowdoc

Debido a la introducción de la sintaxis flexible heredoc/nowdoc, los documentos string que contienen la etiqueta final dentro de su cuerpo pueden causar errores de sintaxis o cambios de la interpretación. Por ejemplo en:

<?php
$str
= <<<FOO
abcdefg
FOO
FOO;
?>
la aparición de FOO con sangría, previamente no tenía ningún significado especial. Ahora se interpretará como el final de la cadena heredoc y el siguiente FOO; provocará un error de sintaxis. Este problema siempre se puede resolver eligiendo una etiqueta final que no aparezca dentro del contenido de la cadena.

Continuar problemas del modificador de adventencias

Declaraciones de continue dirigidas a switch las estructuras de flujo de control ahora generarán una advertencia. En php la declaración continue es equivalente atargeting switch is equivalent to break, mientras estas se comportan como continue 2 en otros lenguajes.

<?php
while ($foo) {
switch (
$bar) {
case
"baz":
continue;
// Warning: "continue" el modificador equivale a
// "break". ¿Te referías a usar "continue 2"?
}
}
?>

Interpretación estricta de las claves Integer en String ArrayAccess

Acceos de array de tipo $obj["123"], donde $obj implementa ArrayAccess y "123" es un integer string literal ya no dará como resultado una conversión implícita a integer, p.e., $obj->offsetGet("123") se llamará en lugar de $obj->offsetGet(123). Esto coincide para el comportamiento existente para los no literales. El comportamiento de arrays no se ve afectado de ninguna manera, ellos continuan explícitamente convirtiendo claves de string integrales a enteros.

Propiedades estáticas ya no separadas por asignación de referencia

En PHP, las propiedades estáticas se comparten entre las clases heredadas, a menos que la propiedad estática se invalide explícitamente en una clase secundaria. Sin embargo, debido a un macanismo de implementación fue posible separar las propiedades estáticas asignando una referencia. Esta laguna ha sido arreglada.

<?php
class Test {
public static
$x = 0;
}
class
Test2 extends Test { }

Test2::$x = &$x;
$x = 1;

var_dump(Test::$x, Test2::$x);
// Previously: int(0), int(1)
// Now: int(1), int(1)
?>

Referencias devueltas por Array y accesos a la propiedad se desenvuelven inmediatamente

Referencias devueltas por array y accesos a la propiedad se desenvuelven ahora como parte del acceso. Esto significa que ya no es posible modificar la referencia entre el acceso y el uso del valor de acceso:

<?php
$arr
= [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Previously: int(4), Now: int(3)
?>
Esto hace que el comportamientos de las referencias y no referencias sea consistente. Por favor note que la lectura y escritura de un valor dentro de una sola expresión permanece como un comportamiento indefinido y puede cambiar de nuevo en el futuro.

Argumento Unpacking de Traversables con claves no enteras ya no se permiten

Argumento unpacking dejó de funcionar con Traversables con las claves no enteras. El siguiente código funcionó en PHP 5.6-7.2 por accidente.

<?php
function foo(...$args) {
var_dump($args);
}
function
gen() {
yield
1.23 => 123;
}
foo(...gen());
?>

Varios

La utilidad ext_skel ha sido completamente rediseñada con nuevas opciones y algunas opciones antiguas eliminadas. Ahora está escrito en PHP y no tiene dependencias externas.

Soporte para el BeOS ha sido retirado.

Excepciones lanzadas debido a la conversión automática de advertencias a excepciones en modo EH_THROW (e.j. algunas excepciones DateTime) ya no ocupan el estado error_get_last(). Como tal, ahora funcionan de la misma manera que las excepciones lanzadas manualmente.

TypeError ahora informa de tipos erróneos como int y bool en lugar de integer y boolean, respectivamente.

Variables no definidas pasadas a compact() será ahora reportado como un aviso.

getimagesize() y funciones relacionadas ahora reportan el tipo mime de las imágenes BMP como image/bmp en lugar de image/x-ms-bmp, ya que el primero ha sido registrado en la IANA (véase » RFC 7903).

stream_socket_get_name() devolverá ahora las direcciones IPv6 envueltas entre paréntesis. Por ejemplo "[::1]:1337" será devuelto en lugar de "::1:1337".

BCMath Matemáticas de Precisión Arbitraria

Todas las advertencias lanzadas por las funciones BCMath son ahora usadas por el manejo de errores de PHP. Anteriormente algunas advertencias han sido escritas directamente a stderr.

bcmul() y bcpow() ahora devuelven los números con la escala solicitada. Anteriormente, los números devueltos pueden haber omitido los ceros decimales.

IMAP, POP3 y NNTP

Los inicio de sesión rsh/ssh están desactivados por defecto. Use imap.enable_insecure_rsh si quiere habilitarlos. Tenga en cuenta que la biblioteca IMAP no filtra los nombres de los buzones antes de pasarlos al comando rsh/ssh, pasando así datos no confiables a esta función con rsh/ssh habilitado es inseguro.

Multibyte String

Debido al soporte añadido a las capturas nombradas, mb_ereg_*() los patrones que utilizan las capturas nombradas se comportarán de forma diferente. En particular las capturas nombradas formarán parte de las coincidencias y mb_ereg_replace() interpretará sintaxis adicional. Véase Capturas Nombradas para más información.

Extensión mejorada de MySQL

Las declaraciones preparadas ahora reportan correctamente los segundos fraccionarios para DATETIME, TIME y TIMESTAMP columnas con especificador de decimales (e.j. TIMESTAMP(6) cuando se usan microsegundos). Anteriormente, la parte de los segundos fraccionarios fue simplemente omitida de los valores devueltos.

Funciones MySQL (PDO_MYSQL)

Las declaraciones preparadas ahora reportan correctamente los segundos fraccionarios para DATETIME, TIME y TIMESTAMP columnas con especificador de decimales (e.j. TIMESTAMP(6) cuando se usa microsegundos). Anteriormente, la parte de los segundos fraccionarios fue simplemente omitida de los valores devueltos. Por favor tenga en cuenta que esto sólo afecta a la utilización de PDO_MYSQL con los preparados emulados apagados (e.j. usando la funcionalidad de la preparación nativa). Las declaraciones que utilizan conexiones que tienen PDO::ATTR_EMULATE_PREPARES=true (que es el valor por defecto) no se vieron afectados por el fallo arreglado y ya han obtenido los valores de segundos fraccionarios adecuados al motor.

Reflection

La exportación Reflection a string utiliza ahora int y bool en lugar de integer y boolean, respectivamente.

Biblioteca estándar de PHP (SPL)

Si un autocargador SPL lanza una excepción, los siguientes autocargadores no serán ejecutados. Anteriormente todos los autocargadores eran ejecutados y las excepciones estaban encadenadas.

SimpleXML

Las operaciones matemáticas con objetos SimpleXML tratarán ahora el texto como un integer o float, lo que sea más apropieado. Anteriormente los valores se trataban como integers incondicionalmente.

add a note

User Contributed Notes 1 note

up
-12
chris at ocproducts dot com
3 years ago
PCRE has been updated (https://wiki.php.net/rfc/pcre2-migration#backward_incompatible_changes).
The new PCRE version is stricter in some cases.
To Top