## Nuevas características

### PHP Core

#### Sintaxis Heredoc y Nowdoc más flexible

Ya no es necesario que el marcador de cierre de los string de documento vaya seguido de un punto y coma o línea nueva. Además, el marcador de cierre puede ser sangrado, en en cuyo caso la indentación se quitará de todas las líneas del string de documento.

#### La Desestructuración de Arrays soporta las Asignaciones de Referencia

La desestructuración de arrays ahora soporta asignaciones de referencia utilizando la sintaxis `[&$a, [$b, &$c]] = $d`. Lo mismo se soporta también para list().

#### Operador Instanceof acepta literales

`instanceof` ahora permite los literales como el primer operando, en en cuyo caso el resultado es siempre `false`.

#### Excepción del error de compilación en lugar de algunos errores de compilación

Una nueva excepción CompileError ha sido añadida, de la cual hereda ParseError. Un pequeño número de errores de compilación lanzarán ahora CompileError en vez de generar un error fatal. Actualmente esto sólo afecta a los errores de compilación que pueden ser lanzados por token_get_all() en modo `TOKEN_PARSE`, pero más errores pueden ser convertidos en el futuro.

#### Se permite el uso de comas en las llamadas

Ahora se permiten las comas en las llamadas a funciones y métodos.

#### Soporte de Argon2id

El argumento de configuración--with-password-argon2[=dir] ahora proporciona soporte tanto para los hashes de Argon2i como de Argon2id en las fuynciones password_hash(), password_verify(), password_get_info(), y password_needs_rehash(). Las contraseñas pueden ser descifradas y verificadas usando la constante `PASSWORD_ARGON2ID`. El soporte tanto para Argon2i como para Argon2id en las funciones password_*() ahora requiere que PHP esté enlazado con la biblioteca de referencia libargon2 ≥ 20161029.

### FastCGI Process Manager

Se han añadido nuevas opciones para personalizar el registro de FPM:

`log_limit`
  Esta opción global puede utilizarse para establecer el límite de registro para la línea que permite registrar mensajes de más de 1024 caracteres sin envoltura. También arregla varios problemas de envoltura.
`log_buffering`
  Esta opción global permite un registro experimental sin buffer extra.
`decorate_workers_output`
  Esta opción de pool permite deshabilitar la decoración de salida para la salida de los trabajadores cuando se habilita `catch_workers_output`.

### Funciones matemáticas de BC

bcscale() ahora también puede ser usado como getter para recuperar la escala actual en uso.

### Protocolo ligero de acceso a directorios

El soporte completo para los controles de LDAP se ha añadido a las funciones de consulta LDAP y

- Un parámetro `$serverctrls` para enviar controles al servidor en ldap_add(), ldap_mod_replace(), ldap_mod_add(), ldap_mod_del(), ldap_rename(), ldap_compare(), ldap_delete(), ldap_modify_batch(), ldap_search(), ldap_list() y ldap_read() ha sido añadido.
- El parámetro de salida `$serverctrls` para obtener los controles del servidor en ldap_parse_result() ha sido añadido.
- Soporte para `LDAP_OPT_SERVER_CONTROLS` y `LDAP_OPT_CLIENT_CONTROLS` en ldap_get_option() y ldap_set_option() ha sido arreglado.

### Funciones de string multibyte

#### Soporte completo de mapeo y plegado de casos

Se ha añadido soporte al mapeo completo y el plegado de casos. A diferencia del mapeo simple, el mapeo completo de los casos puede cambiar la longitud del string. Por ejemplo:

`<?php
mb_strtoupper("Straße");
// Produces STRAßE en PHP 7.2
// Produces STRASSE en PHP 7.3
?>`
Los diferentes modos de mapeo y plegado están disponibles a través de mb_convert_case():

- `MB_CASE_LOWER` (usado por mb_strtolower())
- `MB_CASE_UPPER` (usado por mb_strtoupper())
- `MB_CASE_TITLE`
- `MB_CASE_FOLD`
- `MB_CASE_LOWER_SIMPLE`
- `MB_CASE_UPPER_SIMPLE`
- `MB_CASE_TITLE_SIMPLE`
- `MB_CASE_FOLD_SIMPLE` (utilizado en operaciones que no tienen en cuenta los casos)

Sólo se realiza un mapeo de casos completo incondicional y agnóstico del lenguaje.

#### Las operaciones de string insensible a los casos que utilizan el plegado de casos

Las operaciones de string insensible a las mayúsculas y minúsculas utilizan ahora el plegado de mayúsculas en lugar del mapeo de mayúsculas y minúsculas durante las comparaciones. Esto significa que más caracteres serán considerado (caso insensible) igual ahora.

#### MB_CASE_TITLE realiza la conversión de casos de título

mb_convert_case() con `MB_CASE_TITLE` ahora realiza una conversión de título-caso basado en Cased y CaseIgnorable propiedades derivadas de Unicode. En particular, esto también mejora el manejo de comillas y apóstrofes.

#### Soporte Unicode 11

La tabla de datos Multibyte String ha sido actualizado para Unicode 11.

#### Soporte de string largos

Las Funciones Multibyte String ahora soportan correctamente strings de más de 2GB.

#### Mejoras en el rendimiento

Funcionamiento de la extensión Multibyte String extension ha mejorado significativamente en todos los aspectos. Las mayores mejoras son en las funciones de conversión de casos.

#### Soporte de capturas nombradas

Las funciones `mb_ereg_*` ahora soportan capturas nombradas. Las funciones de coincidencia como mb_ereg() ahora retornarán capturas nombradas usando su número de grupo como su nombre, de forma similar a la PCRE:

`<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>`
Adicionalmente, mb_ereg_replace() ahora soporta la notación `\k<>` y `\k''` para referirse a las capturas nombradas en el string de reemplazo:
`<?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>`
`\k<>` y `\k''` también puede utilizarse para referencias numeradas, que también funciona con números de grupo mayores de 9.

### Readline

Soporte para las opciones `completion_append_character` y `completion_suppress_append` ha sido añadido para readline_info(). Estas opciones sólo están disponibles si PHP está vinculado con libreadline (más que con libedit).