Lanzamiento del lenguaje de programación PHP 7.4

Después de un año de desarrollo presentado lanzamiento del lenguaje de programación PHP 7.4. La nueva rama incluye una serie de novedades, así como varios cambios que rompen la compatibilidad.

Llave mejoras en PHP 7.4:

  • Propiedades escritas - las propiedades de clase ahora pueden incluir declaraciones de tipo, por ejemplo:

    usuario de clase {
    público int $id;
    cadena pública $nombre;
    }

  • Abreviado sintaxis para definir funciones “fn(parameter_list) => expr” con alcance vinculado por valor. Por ejemplo, “fn($x) => $x + $y” es análogo a “$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • Operador de asignación taquigráfica "??=" que se puede utilizar para definir un valor predeterminado ("a ??= b" es similar a "a = a ?? b", si "a" está definido, su valor se almacena, y si no está definido, se almacena se le asigna el valor "b" );
  • Limitado oportunidad preservar la jerarquía de herencia de tipos en tipos de retorno derivados, o la capacidad de invertir la jerarquía de los tipos originales en tipos de argumentos derivados (covarianza contravarianza del tipo de retorno y del tipo de argumento). Las siguientes construcciones ahora se pueden utilizar en PHP:

    clase A {}
    la clase B extiende A {}

    clase Productor {
    método de función pública(): A {}
    }
    clase ChildProducer extiende Productor {
    método de función pública(): B {}
    }

  • Operador de desempaquetado dentro de matrices “…$var”, permitiendo realizar la sustitución de matrices existentes al definir una nueva matriz;

    $partes = ['manzana', 'pera'];
    $frutas = ['plátano', 'naranja', …$partes, 'sandía'];
    // ['plátano', 'naranja', 'manzana', 'pera', 'sandía'];

  • Oportunidad representación visual de números grandes con delimitadores en literales numéricos (1_000_000_00);
  • Apoyar enlaces débiles, que le permiten conservar una referencia a un objeto, pero no impiden que el recolector de basura elimine el objeto asociado;
  • nuevo mecanismo serialización de objetos (una combinación de Serializable y __sleep()/__wakeup()), que reemplazó la interfaz Serializable, que quedará obsoleta;

    // Devuelve una matriz que contiene todos los estados del objeto;
    función pública __serialize(): matriz;

    // Restaura el estado de un objeto desde una matriz
    función pública __unserialize(array $data): void;

  • Permitido lanzar excepciones desde un método. __Encadenar();
  • Se agregó soporte para precargar el caché de código objeto. Parámetro agregado para la configuración.
    opcache precarga, a través del cual puede especificar un script PHP que se compilará y ejecutará cuando se inicie el servidor. Este script puede cargar el código de operación de otros archivos mediante su inclusión directa o usando la función opcache_compile_file();

  • Se agregó la función crc32c a la extensión Hash para calcular sumas de verificación usando el polinomio de Castagnoli;
  • Se agregó soporte a la función password_hash() para los métodos de hash de contraseñas argon2i y argin2id, en la implementación de la biblioteca Sodium, si PHP está construido sin libargon;
  • Se agregó la función mb_str_split(), similar a str_split(), pero que no opera con bytes sino con posiciones de caracteres en una cadena de varios bytes;
  • La función strip_tags() ahora tiene la capacidad de pasar una matriz con nombres de etiquetas, es decir en lugar de strip_tags($str, ' ') ahora puede especificar strip_tags($str, ['a', 'p']);
  • proc_open() permite enumerar los operandos en una matriz en lugar de una cadena para ejecutar, y también proporciona redirección de subprocesos y soporte para un descriptor de archivo nulo;

    proc_open(['php', '-r', 'echo "Hola mundo\n";'], $descriptores, $pipes);

    // Como 2>&1 en shell
    proc_open($cmd, [1 => ['tubería', 'w'], 2 => ['redireccionar', 1]], $tuberías);

    // como 2>/dev/null o 2>nul en shell
    proc_open($cmd, [1 => ['tubería', 'w'], 2 => ['null']], $tuberías);

  • Las extensiones Firebird/Interbase, Recode y WDDX están excluidas de la distribución básica. Estas extensiones ahora se distribuyen a través de PECL;
  • Transferido a categoría obsoleto características como operadores ternarios anidados sin paréntesis, acceso a elementos de matriz y cadenas usando llaves (“$var{$idx}”), la función is_real() y conversión a real, usando la palabra clave principal sin una clase principal, configuraciones del parámetro enable_url_include , usando array_key_exists() en objetos.

    Las funciones get_magic_quotes_gpc(), get_magic_quotes_runtime() y
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), recovery_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Se ha proporcionado una advertencia sobre el uso de una característica obsoleta al intentar procesar símbolos incorrectos en 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

Añadir un comentario