Após um ano de desenvolvimento lançamento de linguagem de programação . A nova ramificação inclui uma série de novos recursos, além de diversas mudanças que quebram a compatibilidade.
Chave em PHP 7.4:
- - as propriedades da classe agora podem incluir declarações de tipo, por exemplo:
classe Usuário {
público int $id;
string pública $nome;
} - sintaxe para definir funções “fn(parameter_list) => expr” com vinculação de escopo por valor. Por exemplo, “fn($x) => $x + $y” é análogo a “$fn2 = function ($x) use ($y) {return $x + $y;}”);
- "??=" que pode ser usado para definir um valor padrão ("a ??= b" é semelhante a "a = a ?? b", se "a" for definido seu valor será armazenado, e se não for definido ele é atribuído o valor "b" );
- Limitado preservando a hierarquia de herança de tipos em tipos de retorno derivados ou a capacidade de reverter a hierarquia dos tipos originais em tipos de argumentos derivados ( tipo de retorno e contravariância do tipo de argumento). As seguintes construções agora podem ser usadas em PHP:
classe A {}
classe B estende A {}classe Produtor {
método de função pública(): A {}
}
class ChildProducer estende Produtor {
método de função pública(): B {}
} - Operador de descompactação dentro de arrays “…$var”, realizar a substituição de arrays existentes ao definir um novo array;
$partes = ['maçã', 'pêra'];
$frutas = ['banana', 'laranja', ...$partes, 'melancia'];
// ['banana', 'laranja', 'maçã', 'pêra', 'melancia']; - representação visual de números grandes com delimitadores em literais numéricos (1_000_000_00);
- apoio , que permitem manter uma referência a um objeto, mas não impedem que o coletor de lixo exclua o objeto associado;
- Novo serialização de objetos (uma combinação de Serializable e __sleep()/__wakeup()), que substituiu a interface Serializable, que será obsoleta;
// Retorna um array contendo todos os estados do objeto;
função pública __serialize(): array;//Restaura o estado de um objeto de um array
função pública __unserialize(array $data): void; - Permitido lançar exceções de um método ;
- Adicionado suporte para pré-carregar o cache de código objeto. Adicionado parâmetro para configuração
, através do qual você pode especificar um script PHP que será compilado e executado quando o servidor for iniciado. Este script pode carregar o opcode de outros arquivos através de sua inclusão direta ou utilizando a função opcache_compile_file(); - Adicionada função crc32c à extensão Hash para calcular checksums usando o polinômio Castagnoli;
- Adicionado suporte à função password_hash() para métodos de hash de senha argon2i e argin2id, na implementação da biblioteca Sodium, caso o PHP seja construído sem libargon;
- Adicionada função mb_str_split(), semelhante a str_split(), mas operando não com bytes, mas com posições de caracteres em uma string multibyte;
- A função strip_tags() agora tem a capacidade de passar um array com nomes de tags, ou seja, em vez de strip_tags($str, ‘’) agora você pode especificar strip_tags($str, [‘a’, ‘p’]);
- proc_open() permite que os operandos sejam listados em um array, em vez de uma string para ser executada, e também fornece redirecionamento de thread e suporte para um descritor de arquivo nulo;
proc_open(['php', '-r', 'echo "Hello World\n";'], $descritores, $pipes);
// Como 2>&1 no shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirecionar', 1]], $pipes);// como 2>/dev/null ou 2>nul no shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['nulo']], $pipes); - As extensões Firebird/Interbase, Recode e WDDX estão excluídas da distribuição básica. Estas extensões são agora distribuídas através do PECL;
- Transferido para categoria recursos como operadores ternários aninhados sem parênteses, acesso a elementos de array e strings usando chaves (“$var{$idx}”), a função is_real() e conversão para real, usando a palavra-chave pai sem uma classe pai, configurações de parâmetro permitir_url_include , usando array_key_exists() em objetos.
As funções get_magic_quotes_gpc(), get_magic_quotes_runtime() e
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().Um aviso sobre o uso de um recurso obsoleto foi fornecido ao tentar processar símbolos incorretos em funções
base_convert(), bindec(), octdec() e hexdec(), e ao especificar um padrão sem string em mb_ereg_replace().
Fonte: opennet.ru
