PHP é uma linguagem de script de servidor de uso geral de código aberto, originalmente projetada para desenvolvimento da Web para produzir páginas da Web dinâmicas. É uma das primeiras linguagens de script do lado do servidor desenvolvidas a ser incorporada em um documento de origem HTML, em vez de chamar um arquivo externo para processar dados. O código é interpretado por um servidor Web com um módulo processador PHP que gera a página Web resultante. Ele também evoluiu para incluir um recurso de interface de linha de comando e pode ser usado em aplicativos gráficos independentes.
Se você é novo no PHP e deseja ter uma ideia de como ele funciona, experimente o tutorial introdutório.
Depois disso, confira o manual online.
O que há de novo
PHP 8.4 é uma grande atualização da linguagem PHP. Ele contém muitos recursos novos, como ganchos de propriedade, visibilidade assimétrica, uma API DOM atualizada, melhorias de desempenho, correções de bugs e limpeza geral.
Esta versão marca o último lançamento secundário da linguagem PHP.
O PHP 8.4 vem com inúmeras melhorias e novos recursos, como:
- Ganchos de propriedade
- Visibilidade de propriedade assimétrica
- Objetos preguiçosos
- Subclasses específicas do driver PDO
- Tipo de objeto BCMath
- E muito mais…
BcMatemática:
- [RFC] Adicione bcfloor, bcceil e bcround ao BCMath.
- Melhore o desempenho.
- Ajuste o parâmetro $mode de bcround() para aceitar apenas a enumeração RoundingMode.
- Corrigido LONG_MAX na extensão BCMath.
- Corrigido bcdiv() div por um.
- [RFC] Suporta tipos de objetos no BCMath.
- melhoria de desempenho do bcpow().
- ext/bcmath: verifica se há estouro de escala.
- [RFC] ext/bcmath: Adicionado bcdivmod.
- Correção GH-15968 (evite converter objetos em strings em cálculos de operadores).
- Bug GH-16265 corrigido (Adicionado caso de retorno antecipado quando o resultado é 0) (Saki Takamachi).
- Bug corrigido GH-16262 (corrigido um bug onde size_t transbordava) (Saki Takamachi).
- Corrigido GH-16236 (corrigido um bug em BcMath\Number::pow() e bcpow() ao aumentar potências negativas de 0) (Saki Takamachi).
Essencial:
- Adicionada implementação zend_call_stack_get para NetBSD, DragonFlyBSD, Solaris e Haiku.
- Habilitadas verificações ifunc no FreeBSD a partir das versões 12.x.
- Alterado o tipo de constantes PHP_DEBUG e PHP_ZTS para bool.
- Corrigido o bug GH-13142 (o nome da variável indefinida é abreviado quando contém \0).
- Corrigido o bug GH-13178 (posições do iterador incorretas ao converter array compactado em hash).
- Corrigida a construção de fibra Zend para o modo padrão do Solaris (32 bits).
- Tamanho da pilha de chamadas zend corrigido para macOs/arm64.
- Adicionado suporte para Zend Max Execution Timers no FreeBSD.
- Certifique-se de que a pilha de fibra não seja suportada por THP.
- Implemente GH-13609 (objeto empacotado de despejo na classe WeakReference).
- Adicionado suporte de montagem de arco sparc64 para fibra zend.
- Corrigido GH-13581 sem espaço disponível para TLS no NetBSD.
- Adicionado suporte de fibra Sys-V loongarch64.
- Nomes de fechamento ajustados para incluir o nome da função pai.
- Melhore a aleatoriedade dos nomes dos arquivos enviados e dos arquivos criados por tempnam().
- Adicionados retornos de chamada gc e shutdown aos manipuladores personalizados zend_mm.
- Corrigido bug GH-14650 (Calcule o tamanho das páginas antes de alocar memória).
- Bug GH-11928 corrigido (o –enable-re2c-cgoto não adiciona o sinalizador -g).
- Adicionado o #[\Deprecated] atributo.
- Corrigido GH-11389 (Permitir suspensão de fibras em destruidores).
- Bug GH-14801 corrigido (compilação corrigida para armv7).
- RFC de ganchos de propriedade implementados.
- Correção GH-14978 (a extensão xmlreader phpize build).
- Lançar exceção de erro ao encontrar recursão durante a comparação, em vez de erro fatal.
- Adicionada inclusão cstddef ausente para compilações C++.
- Scripts do sistema de compilação atualizados config.guess para 27/07/2024 e config.sub para 27/05/2024.
- Bug GH-15240 corrigido (recursão infinita no gancho de característica).
- Bug GH-15140 corrigido (verificação de variação ausente para conjunto abstrato com tipo assimétrico).
- Bug GH-15181 corrigido (o manipulador de saída desativado é liberado novamente).
- Passar E_USER_ERROR para trigger_error() agora está obsoleto.
- Bug GH-15292 corrigido (a detecção AVX dinâmica está quebrada para MSVC).
- Usar “_” como nome de classe agora está obsoleto.
- Sair de um namespace agora limpa os símbolos vistos.
- As construções da linguagem exit (e die) agora se comportam mais como uma função. Eles podem receber callables semelhantes, são afetados pela instrução strict_types declare e agora executam as coerções de tipo usuais em vez de converter qualquer valor não inteiro em uma string. Como tal, passar tipos inválidos para exit/die agora pode resultar no lançamento de um TypeError.
- Bug GH-15438 corrigido (ganchos em propriedades promovidas pelo construtor sem visibilidade são ignorados).
- Bug GH-15419 corrigido (verificação de incompatibilidade somente leitura + gancho ausente para classes somente leitura).
- Bug GH-15187 corrigido (vários problemas de iterador de objeto viciado).
- Corrigido bug GH-15456 (Crash em get_class_vars() em propriedades virtuais).
- Bug corrigido GH-15501 (Windows HAVE_
_H macros definidas como 1 ou indefinidas). - Implementada visibilidade assimétrica para propriedades.
- Corrigido bug GH-15644 (Visibilidade assimétrica não funciona com ganchos).
- RFC de objetos preguiçosos implementado.
- Bug GH-15686 corrigido (Construindo iconv compartilhado com biblioteca iconv externa).
- Corrigido erro ausente ao adicionar visibilidade assimétrica à propriedade virtual unilateral.
- Bug GH-15693 corrigido (inclusão desnecessária no binário main.c bloats).
- Bug GH-15731 corrigido (a validação de AllowDynamicProperties deve apresentar erro em enums).
- Corrigido bug GH-16040 (Use-after-free de objeto liberado no gancho).
- Corrigido bug GH-16026 (Reutilização de fibra dtor durante desligamento).
- Bug GH-15999 corrigido (falha de asserção zend_std_write_property() com objetos lentos).
- Bug GH-15960 corrigido (casos extremos de Foreach com objetos preguiçosos).
- Bug GH-16185 corrigido (vários problemas de iterador de objeto viciado).
- Bug OSS-Fuzz #371445205 corrigido (Heap-use-after-free em attr_free).
- Corrigido erro ausente ao adicionar visibilidade assimétrica a propriedades estáticas.
- Bug OSS-Fuzz #71407 corrigido (desreferência nula WRITE em zend_lazy_object_clone).
- Bug GH-16574 corrigido (mensagens de erro “método indefinido” incorretas).
- Bug corrigido GH-16577 (EG(strtod_state).freelist vaza com opcache.preload).
- Corrigido bug GH-16615 (falha de asserção em zend_std_read_property).
- Bug GH-16342 corrigido (adicionado ReflectionProperty::isLazy()).
- Bug GH-16725 corrigido (verificação de acesso incorreta para adereços não conectados no iterador de objeto conectado).
Enrolar:
- A constante CURLOPT_BINARYTRANSFER foi descontinuada.
- A versão necessária do libcurl foi alterada para 7.61.0.
- Adicionada chave feature_list ao valor de retorno curl_version().
- Adicionadas constantes CURL_HTTP_VERSION_3 (libcurl 7.66) e CURL_HTTP_VERSION_3ONLY (libcurl 7.88) como opções para CURLOPT_HTTP_VERSION (Ayesh Karunaratne)
- Adicionado CURLOPT_TCP_KEEPCNT para definir o número de testes a serem enviados antes de interromper a conexão.
- Adicionada opção Curl CURLOPT_PREREQFUNCTION para definir um retorno de chamada personalizado após a conexão ser estabelecida, mas antes da solicitação ser executada.
- Adicionado CURLOPT_SERVER_RESPONSE_TIMEOUT, anteriormente conhecido como CURLOPT_FTP_RESPONSE_TIMEOUT.
- A opção CURLOPT_DNS_USE_GLOBAL_CACHE agora é ignorada silenciosamente.
- Adicionado CURLOPT_DEBUGFUNCTION como uma opção Curl.
- Bug GH-16359 corrigido (travamento com curl_setopt* CURLOPT_WRITEFUNCTION sem retorno de chamada nulo).
- Bug GH-16723 corrigido (problemas de CURLMOPT_PUSHFUNCTION).
Data:
- Adicionado DataHora[Immutable]::createFromTimestamp.
- Adicionado DataHora[Immutable]::[get|set]Microssegundo.
- As constantes SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING e SUNFUNCS_RET_DOUBLE agora estão obsoletas.
- Corrigido bug GH-13773 (DatePeriod não leva em consideração microssegundos para data de término).
DBA:
- Passar nulo ou falso para dba_key_split() está obsoleto.
Depuração:
- Bug corrigido GH-15923 (GDB: exceção Python
: as exceções devem derivar de BaseException).
DOM:
- Adicionado DOMNode::compareDocumentPosition().
- Implemente #53655 (Melhore a velocidade de DOMNode::C14N() em documentos XML grandes).
- Correção do atributo de clonagem com espaço para nome desaparecendo.
- Implemente RFC de análise e serialização de DOM HTML5.
- Corrigir DOMElement->prefix com string vazia cria prefixo falso.
- Lide com OOM de forma mais consistente.
- Implementado RFC “Melhorar retornos de chamada em ext/dom e ext/xsl”.
- Adicionado método estático DOMXPath::quote().
- RFC de conformidade com especificações ext/dom de aceitação implementada.
- Bug #79701 corrigido (getElementById não funciona corretamente com definições duplicadas).
- Implementado RFC “Novos recursos ext-dom no PHP 8.4”.
- Corrigido GH-14698 (segfault na desreferência do nó DOM).
- Melhore o suporte para elementos de modelo.
- Corrigir vazamento de trampolim em callables XPath.
- Jogue em vez de falhar silenciosamente ao criar um nó de texto muito longo em (DOM)ParentNode e (DOM)ChildNode.
- Corrigido bug GH-15192 (falha de segmentação na extensão dom (html5_serializer)).
- Constante DOM_PHP_ERR obsoleta.
- Removido DOMImplementation::getFeature().
- Bug GH-15331 corrigido (falha no teste Element::$substitutedNodeValue).
- Corrigido bug GH-15570 (falha de segmentação (ponteiro nulo de acesso) em ext/dom/html5_serializer.c).
- Corrigido bug GH-13988 (Armazenar DOMElement consome 4 vezes mais memória no PHP 8.1 do que no PHP 8.0).
- Corrija a errata do serializador XML: a serialização xmlns=”” deve ser permitida.
- Bug GH-15910 corrigido (falha de declaração em ext/dom/element.c).
- Corrija a desconfiguração das propriedades do DOM.
- Bug GH-16190 corrigido (usar reflexão para chamar Dom\Node::__construct causa falha na asserção).
- Corrija casos extremos na decodificação de análise de DOM.
- Bug GH-16465 corrigido (estouro de buffer de heap em DOMNode->getElementByTagName).
- Corrigido bug GH-16594 (falha de asserção no DOM -> antes).
Leia as notas de lançamento completas aqui.