This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.
Se ha añadido un opcode de VM especializado para la función
array_key_exists(), lo que mejora el rendimiento de esta función si puede resolverse estáticamente.
En el código bajo un espacio de nombres, esto puede requerir escribir
\array_key_exists()
o importar explícitamente la función.
Cuando preg_match() en modo UTF-8 (modificador
"u"
) se llama repetidamente sobre la misma string
(pero posiblemente en diferentes posiciones), solo se verificará una vez para la validez UTF-8.
zend.exception_ignore_args es una nueva directiva INI para incluir o excluir los argumentos de las trazas de pila generadas por las excepciones.
opcache.preload_user es una nueva directiva INI que permite especificar la cuenta de usuario que tiene el rol de ejecutar el código precargado (el usuario root no está permitido por razones de seguridad).
Se ha migrado un número de extensiones para usar exclusivamente pkg-config para la detección de dependencias de bibliotecas. Generalmente, esto significa que en lugar de usar
--with-foo-dir=DIR o similar, solo se usa
--with-foo. Las rutas de bibliotecas personalizadas pueden especificarse agregando directorios adicionales a PKG_CONFIG_PATH
o especificando las opciones de compilación explícitamente a través de
FOO_CFLAGS
y FOO_LIBS
.
Las siguientes extensiones y SAPIs están afectadas:
fputcsv(),
fgetcsv(),
SplFileObject::fputcsv(),
SplFileObject::fgetcsv(), y
SplFileObject::setCsvControl()
ahora aceptan una string vacía como argumento
$escape
, lo que desactiva el mecanismo de escape propietario de PHP.
El comportamiento de str_getcsv() se ha ajustado en consecuencia (anteriormente, una string vacía era igual a usar los valores por defecto).
SplFileObject::getCsvControl() ahora también puede devolver una string vacía para el tercer elemento del array.
La extensión filter ya no expone --with-pcre-dir para los builds Unix y ahora puede compilarse de manera confiable como compartida al usar ./configure
El comportamiento de imagecropauto() en la biblioteca libgd proporcionada se ha sincronizado con el de libgd del sistema:
IMG_CROP_DEFAULT
ya no se repliega en
IMG_CROP_SIDES
El parámetro por defecto $mode
de
imagecropauto() se ha cambiado a
IMG_CROP_DEFAULT
; proporcionar -1
ahora está obsoleto.
imagescale() ahora soporta la preservación de la relación de aspecto al escalar a una altura fija pasando -1
a $new_width
.
La extensión hash ya no puede ser desactivada y siempre forma parte de cualquier build de PHP, similar a la extensión date.
Se ha eliminado el soporte para nsldap y umich_ldap.
Todas las extensiones basadas en libxml requieren libxml 2.7.6 o superior.
La biblioteca oniguruma ya no se proporciona con PHP; en su lugar, libonig debe estar disponible en el sistema. Alternativamente, --disable-mbregex puede usarse para desactivar el componente mbregex.
Las opciones de configuración --disable-opcache-file y --enable-opcache-file han sido eliminadas en favor de la directiva INI opcache.file_cache.
Las funciones password_hash() y password_needs_rehash()
ahora aceptan string y int nullable para el argumento
$algo
.
La instalación de PEAR (incluido PECL) ya no está habilitada por defecto. Esto puede habilitarse explícitamente usando --with-pear. Esta opción está obsoleta y podría eliminarse en el futuro.
Los valores numéricos de las constantes de modificador
(IS_ABSTRACT
,
IS_DEPRECATED
,
IS_EXPLICIT_ABSTRACT
,
IS_FINAL
,
IS_IMPLICIT_ABSTRACT
,
IS_PRIVATE
,
IS_PROTECTED
,
IS_PUBLIC
, y
IS_STATIC
) en las clases
ReflectionClass,
ReflectionFunction,
ReflectionMethod,
ReflectionObject, y
ReflectionProperty
han sido modificados.
SimpleXMLElement ahora implementa Countable.
La biblioteca libsqlite integrada ha sido eliminada. Para compilar la extensión SQLite3 ahora se requiere una libsqlite3 ≥ 3.7.4 del sistema. Para compilar la extensión PDO_SQLite ahora se requiere una libsqlite3 ≥ 3.5.0 del sistema.
La serialización y deserialización de SQLite3, SQLite3Stmt y SQLite3Result ahora está explícitamente prohibida. Anteriormente, la serialización de instancias de estas clases era posible, pero la deserialización generaba objetos inutilizables.
La notación @param
ahora puede usarse para denotar los parámetros de consulta SQL.
La biblioteca libzip integrada ha sido eliminada. Ahora se requiere una libzip >= 0.11 del sistema para compilar la extensión zip.
This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.
As of PHP 7.4, an exception thrown within the user-defined shutdown function can be caught by the user-defined exception handler.
<?php
set_error_handler(
function($level, $error, $file, $line){
if(0 === error_reporting()){
return false;
}
throw new ErrorException($error, -1, $level, $file, $line);
},
E_ALL
);
register_shutdown_function(function(){
$error = error_get_last();
if($error){
throw new ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
}
});
set_exception_handler(function($exception){
// ... more code ...
});
require 'NotExists.php';
Note for internals/extensions:
Many opcode values changed between PHP 7.3 and 7.4, so most documentation resources are outdated in that regard. You can look the definitions at Zend/zend_vm_opcodes.h in php-src. For example, ZEND_ECHO changes from 40 to 136.
While opcode changes happen in a lot of PHP versions, the change in 7.4 is quite significant.