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.
Um opcode VM especializado para a função array_key_exists()
foi adicionado, o que melhora o desempenho desta função se ela
puder ser resolvida estaticamente. No código com namespace, pode ser necessário
escrever \array_key_exists()
ou importar explicitamente
a função.
Quando preg_match() no modo UTF-8 (modificador "u"
)
é chamado repetidamente na mesma string (mas possivelmente deslocamentos diferentes),
ele só será verificado para a validade UTF-8 uma vez.
zend.exception_ignore_args é uma nova diretiva INI para incluir ou excluir argumentos de rastreamentos de pilha gerados a partir de exceções.
opcache.preload_user é uma nova diretiva INI para especificar a conta de usuário sob a qual o código de pré-carregamento é executado se, de outra forma, for executado como root (o que não é permitido por motivos de segurança).
Várias extensões foram migradas para usar exclusivamente pkg-config para a
detecção de dependências de biblioteca. Geralmente, isso significa que, em vez de usar
--with-foo-dir=DIR ou similar, apenas
--with-foo é usado. Os caminhos de biblioteca
personalizados podem ser especificados adicionando diretórios adicionais a PKG_CONFIG_PATH
ou especificando explicitamente as opções de compilação por meio de FOO_CFLAGS
e FOO_LIBS
.
As seguintes extensões e SAPIs são afetadas:
fputcsv(),
fgetcsv(),
SplFileObject::fputcsv(),
SplFileObject::fgetcsv(), e
SplFileObject::setCsvControl()
agora aceitam uma string vazia como argumento $escape
,
que desativa o mecanismo de escape proprietário do PHP.
O comportamento de str_getcsv() foi ajustado adequadamente (anteriormente, uma string vazia era idêntica a usar o padrão).
SplFileObject::getCsvControl() agora também pode retornar uma string vazia para o terceiro elemento do array, adequadamente.
A extensão filter não expõe mais --with-pcre-dir para compilações Unix e agora pode ser construída de forma confiável como compartilhada ao usar ./configure
O comportamento de imagecropauto() no pacote libgd foi sincronizado com o do sistema libgd:
IMG_CROP_DEFAULT
não está mais voltando
para IMG_CROP_SIDES
O parâmetro $mode
padrão de ]
imagecropauto() foi alterado para
IMG_CROP_DEFAULT
; passar -1
agora está descontinuado.
imagescale() agora oferece suporte à proporção preservando
a escala para uma altura fixa passando -1
como $new_width
.
A extensão hash não pode mais ser desativada e é sempre parte integrante de qualquer compilação do PHP, semelhante à extensão date.
O suporte para nsldap e umich_ldap foi removido.
Todas as extensões baseadas em libxml agora requerem libxml 2.7.6 ou mais recente.
A biblioteca oniguruma não é mais empacotada com o PHP, em vez disso libonig precisa estar disponível no sistema. Alternativamente, --disable-mbregex pode ser usado para desabilitar o componente mbregex.
As opções de configuração --disable-opcache-file e --enable-opcache-file foram removidas em favor da diretiva INI opcache.file_cache.
As funções password_hash() e
password_needs_rehash() agora
aceitam string anulável e int para o argumento $algo
.
A instalação do PEAR (incluindo PECL) não é mais habilitada por padrão. Ele pode ser ativado explicitamente usando --with-pear. Esta opção está descontinuada e pode ser removida no futuro.
Os valores numéricos das constantes do modificador
(IS_ABSTRACT
,
IS_DEPRECATED
,
IS_EXPLICIT_ABSTRACT
,
IS_FINAL
,
IS_IMPLICIT_ABSTRACT
,
IS_PRIVATE
,
IS_PROTECTED
,
IS_PUBLIC
, e
IS_STATIC
) nas classes
ReflectionClass,
ReflectionFunction,
ReflectionMethod,
ReflectionObject, e
ReflectionProperty
foram alterados.
SimpleXMLElement agora implementa Countable.
O pacote libsqlite foi removido. Para construir a extensão SQLite3, um sistema libsqlite3 ≥ 3.7.4 agora é necessário. Para construir a extensão PDO_SQLite, um sistema libsqlite3 ≥ 3.5.0 agora é necessário.
A serialização e desserialização de SQLite3, SQLite3Stmt e SQLite3Result agora são explicitamente proibidas. Anteriormente, a serialização de instâncias dessas classes era possível, mas a desserialização produzia objetos inutilizáveis.
A notação @param
agora também pode ser usada para
denotar parâmetros de consulta SQL.
A biblioteca libzip empacotada foi removida. Um sistema libzip >= 0.11 agora é necessário para construir a extensão 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.