Después de un año de desarrollo lanzamiento del lenguaje de programación La nueva rama incluye varias características nuevas, así como algunos cambios incompatibles.
Llave en PHP 7.4:
- — Las propiedades de clase ahora pueden incluir declaraciones de tipo, por ejemplo:
usuario de clase {
público int $id;
cadena pública $nombre;
} - La sintaxis de definición de funciones "fn(lista_de_parámetros) => expr" tiene un ámbito de valor vinculado. Por ejemplo, "fn($x) => $x + $y" es equivalente a "$fn2 = function ($x) use ($y) {return $x + $y;}");
- "??=", que se puede utilizar para definir un valor predeterminado ("a ??= b" es similar a "a = a ?? b", si "a" está definido, su valor se conserva y, si no está definido, se le asigna el valor de "b");
- Limitado preservar la jerarquía de herencia de tipos en los tipos de valor de retorno derivados de ellos o la posibilidad de transformar la jerarquía de los tipos originales a la opuesta en los tipos de argumento derivados ( (contravariación entre el tipo de retorno y el tipo de argumento). Las siguientes construcciones ahora se pueden usar en PHP:
clase A {}
La clase B extiende A {}clase Productor {
función pública método(): A {}
}
clase ChildProducer extiende Producer {
función pública método(): B {}
} - El operador de desempaquetado dentro de las matrices "...$var", realizar la sustitución de las matrices existentes al definir una nueva matriz;
$partes = ['manzana', 'pera'];
$frutas = ['plátano', 'naranja', …$partes, 'sandía'];
// ['plátano', 'naranja', 'manzana', 'pera', 'sandía']; - Presentación visual de números grandes con separadores en literales numéricos (1_000_000_00);
- Apoyar , que permiten conservar una referencia a un objeto, pero no impiden la eliminación del objeto asociado por parte del recolector de basura;
- nuevo serialización de objetos (una combinación de Serializable y __sleep()/__wakeup()), reemplazando la interfaz Serializable, que será declarada obsoleta;
// Devuelve una matriz que contiene todos los estados del objeto;
función pública __serializar(): array;// Restaura el estado de un objeto a partir de un array
función pública __unserialize(array $data): void; - Permitir que se generen excepciones desde un método ;
- Se ha añadido compatibilidad con la precarga de la caché de código objeto. Se ha añadido un nuevo parámetro de configuración.
, lo que permite especificar un script PHP que se compilará y ejecutará al iniciar el servidor. Este script puede cargar los opcodes de otros archivos incluyéndolos directamente o utilizando la función opcache_compile_file(); - Se ha añadido la función crc32c a la extensión Hash para calcular sumas de comprobación utilizando el polinomio de Castagnoli;
- La función password_hash() se ha actualizado para admitir los métodos de cifrado de contraseñas argon2i y argin2id en la implementación de la biblioteca Sodium si PHP se compila sin libargon;
- Se agregó la función mb_str_split(), similar a str_split(), pero que opera no sobre bytes sino sobre posiciones de caracteres en una cadena multibyte;
- La función strip_tags() ahora le permite pasar una matriz de nombres de etiquetas, es decir, en lugar de strip_tags($str, ' ') ahora puede especificar strip_tags($str, ['a', 'p']);
- proc_open() permite listar operandos en una matriz en lugar de especificar una cadena para ejecutar, y también implementa la capacidad de redirigir flujos y admitir un descriptor de archivo nulo;
proc_open(['php', '-r', 'echo "Hola Mundo\n";'], $descriptors, $pipes);
// Como 2>&1 en la shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);// como 2>/dev/null o 2>nul en la shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes); - Las extensiones Firebird/Interbase, Recode y WDDX se han eliminado de la distribución base. Estas extensiones ahora se distribuyen a través de PECL;
- Transferido a la categoría Características como operadores ternarios anidados sin paréntesis, acceso a elementos de matrices y cadenas usando llaves ("$var{$idx}"), la función is_real() y la conversión a real, el uso de la palabra clave parent sin una clase parent, la opción de configuración allow_url_include y el uso de array_key_exists() en objetos.
Las funciones get_magic_quotes_gpc() y get_magic_quotes_runtime() han sido declaradas obsoletas.
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().Se proporcionó una advertencia sobre el uso de una función obsoleta al intentar procesar caracteres no válidos en las funciones.
base_convert(), bindec(), octdec() y hexdec(), y al especificar un patrón que no sea una cadena en mb_ereg_replace().
Fuente: opennet.ru
