Despois dun ano de desenvolvemento presentado versión da linguaxe de programación PHP 7.4. A nova rama inclúe unha serie de novidades, así como varios cambios que rompen a compatibilidade.
Propiedades tipificadas - As propiedades de clase agora poden incluír declaracións de tipo, por exemplo:
usuario de clase {
público int $id;
cadea pública $nome;
}
Abreviado sintaxe para definir funcións "fn(lista_parámetros) => expr" con unión de ámbito por valor. Por exemplo, “fn($x) => $x + $y” é análogo a “$fn2 = function ($x) use ($y) {return $x + $y;}”);
Operador de asignación taquigráfica "??=" que se pode usar para definir un valor predeterminado ("a ??= b" é semellante a "a = a ?? b", se se define "a" gárdase o seu valor, e se non se define asígnaselle o valor "b" );
Limitado oportunidade preservar a xerarquía de herdanza dos tipos nos tipos de retorno derivados ou a capacidade de invertir a xerarquía dos tipos orixinais nos tipos de argumentos derivados (covarianza tipo de retorno e contravarianza do tipo de argumento). Agora pódense usar as seguintes construcións en PHP:
clase A {}
clase B esténdese A {}
productor de clase {
método de función pública (): A {}
}
clase ChildProducer estende Producer {
método de función pública (): B {}
}
Operador de desempaquetado dentro das matrices “…$var”, permitindo realizar a substitución de matrices existentes ao definir unha nova matriz;
Oportunidade representación visual de grandes números con delimitadores en literais numéricos (1_000_000_00);
Apoiar ligazóns débiles, que permiten conservar unha referencia a un obxecto, pero non impiden que o colector de lixo elimine o obxecto asociado;
Novo mecanismo serialización de obxectos (unha combinación de Serializable e __sleep()/__wakeup()), que substituíu a interface Serializable, que quedará obsoleta;
// Devolve unha matriz que contén todos os estados do obxecto;
función pública __serialize(): matriz;
// Restaura o estado dun obxecto dunha matriz
función pública __unserialize(array $data): void;
Permítese lanzar excepcións dun método __toString();
Engadido soporte para cargar previamente a caché de código obxecto. Parámetro engadido para a configuración opcache.precarga, a través do cal pode especificar un script PHP que se compilará e executará cando se inicie o servidor. Este script pode cargar o código de operación doutros ficheiros mediante a súa inclusión directa ou mediante a función opcache_compile_file();
Engadiuse a función crc32c á extensión Hash para calcular sumas de verificación usando o polinomio de Castagnoli;
Engadido soporte á función password_hash() para os métodos de hash de contrasinais argon2i e argin2id, na implementación da biblioteca Sodium, se PHP está construído sen libargon;
Engadiuse a función mb_str_split(), similar a str_split(), pero que opera non con bytes senón con posicións de caracteres nunha cadea de varios bytes;
A función strip_tags() agora ten a capacidade de pasar unha matriz con nomes de etiquetas, é dicir. en lugar de strip_tags($str, ' ') agora podes especificar strip_tags($str, ['a', 'p']);
proc_open() permite que os operandos sexan listados nunha matriz en lugar de executar unha cadea, e tamén proporciona redirección de fíos e soporte para un descritor de ficheiro nulo;
// Como 2>&1 no shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);
// como 2>/dev/null ou 2>nul no shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);
As extensións Firebird/Interbase, Recode e WDDX están excluídas da distribución básica. Estas extensións distribúense agora a través de PECL;
Trasladado a categoría desactualizado características como operadores ternarios anidados sen parénteses, acceso a elementos da matriz e cadeas usando chaves ("$var{$idx}"), a función is_real() e a conversión a real, usando a palabra clave pai sen unha clase pai, o parámetro allow_url_include configuracións , usando array_key_exists() en obxectos.
As funcións 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().
Proporcionouse unha advertencia sobre o uso dunha función obsoleta ao intentar procesar símbolos incorrectos nas funcións
base_convert(), bindec(), octdec() e hexdec(), e ao especificar un patrón que non sexa de cadea en mb_ereg_replace().