Após um ano de desenvolvimento apresentado lançamento de linguagem de programação PHP 7.4. A nova ramificação inclui uma série de novos recursos, além de diversas mudanças que quebram a compatibilidade.
Propriedades digitadas - as propriedades da classe agora podem incluir declarações de tipo, por exemplo:
classe Usuário {
público int $id;
string pública $nome;
}
Abreviado 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;}”);
Operador de atribuição abreviada "??=" 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 oportunidade 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 (covariância 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”, permitindo realizar a substituição de arrays existentes ao definir um novo array;
Oportunidade representação visual de números grandes com delimitadores em literais numéricos (1_000_000_00);
apoio elos fracos, que permitem manter uma referência a um objeto, mas não impedem que o coletor de lixo exclua o objeto associado;
Novo máquinas 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;
Adicionado suporte para pré-carregar o cache de código objeto. Adicionado parâmetro para configuração opcache. pré-carregar, 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;
// 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 desatualizado 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().