Nuevas características
Declaraciones de tipo escalar
Las
declaraciones de tipo
escalar vienen en dos modos: coercitivo (por defecto) o estricto. Los tipos de parámetros
siguientes pueden ser forzados (ya sea coercitivo o estricto): los strings (string), los enteros
(int), los decimales (float) y
los valores booleanos (bool). Complementan los otros tipos
introducidos en PHP 5: los nombres de clases, las interfaces, los arrays (array) y
las funciones invocables (callable).
Para activar el modo estricto, se debe colocar una sola directiva declare en la parte
superior del fichero. Esto significa que el modo estricto de declaración de tipo escalar se configura
por fichero. La directiva no solo afecta a la declaración de parámetros, sino también
al tipo de retorno de la función (ver las declaraciones de
tipo de retorno en las
funciones de PHP y las que provienen de
extensiones).
En la referencia se pueden encontrar una documentación completa y ejemplos de declaraciones de
tipo
escalar: Declaraciones de
tipo.
Declaraciones de tipo de retorno
PHP 7 añade soporte para declaraciones de tipo de retorno.
similar a
las declaraciones de tipo
de argumento, las declaraciones de tipo de retorno especifican el tipo del valor que devuelve
la función. Los mismos tipos que
están disponibles
para las declaraciones de tipo de retorno están disponibles para las declaraciones de tipo
de argumento.
Una documentación completa y ejemplos de declaraciones de tipo de retorno pueden encontrarse en la
referencia:
Declaraciones de tipo de
retorno.
El operador de fusión nula
El operador de fusión nula (??) se ha añadido como
un azúcar sintáctico para los casos de uso más comunes de necesitar una tercera conjunción
con la función isset(). Devuelve el primer operando si
existe y no tiene un valor null; y devuelve el segundo operando en caso contrario.
El operador nave espacial
El operador nave espacial se utiliza para comparar dos expresiones. Devuelve -1, 0 o
1 cuando $a es respectivamente menor, igual o mayor que $b. Las
comparaciones se realizan según las reglas de comparación de
tipos habituales de PHP.
Arrays constantes con define()
Los arrays (Array) constantes ahora pueden ser definidos
con la función define(). En PHP 5.6, solo podían ser definidos con
const.
Clases anónimas
Se ha añadido soporte para clases anónimas a través de la
instanciación new class. Esto puede ser utilizado en lugar de definir toda una clase para
objetos desechables:
La documentación completa puede encontrarse en la
referencia de clases anónimas.
Sintaxis de escape de punto de código Unicode
Toma un punto de código Unicode en forma hexadecimal, en una cadena
entre comillas dobles o una sintaxis heredoc, para convertirlo en UTF-8. Cualquier punto de
código válido es aceptado, siendo opcionales los ceros iniciales.
El método Closure::call() se ha vuelto más eficiente. Una
forma más corta de enlazar temporalmente una clausura al ámbito de un objeto e invocarla.
Esta funcionalidad tiene como objetivo garantizar una mayor seguridad cuando se realiza la deserialización de
objetos con datos no confiables. Evita posibles inyecciones de código permitiendo al desarrollador
crear una lista blanca de las clases que pueden ser deserializadas.
La nueva clase IntlChar expone la funcionalidad ICU
adicional. La clase en sí define un número de métodos estáticos y constantes
que pueden ser utilizados para manipular los caracteres Unicode.
Para usar esta clase, debe instalar la extensión Intl.
Expectativas
Las expectativas son
una mejora retrocompatible a la antigua función
assert(). Ofrecen aserciones de muy bajo costo en el código
de producción y permiten lanzar excepciones personalizadas cuando la aserción falla.
Aunque la antigua API sigue siendo mantenida por razones de
compatibilidad, la función assert() ahora es una construcción del
lenguaje, permitiendo que el primer parámetro sea una expresión en lugar de un
string a evaluar o un bool a probar.
Se pueden encontrar más detalles sobre esta funcionalidad, incluyendo cómo configurarla en
entornos de desarrollo y producción, en la sección de expectativas en la
referencia de la función assert().
Agrupar las declaraciones use
Las clases, funciones y constantes importadas desde el mismo namespace
ahora pueden ser agrupadas en una sola instrucción use.
Expresiones de retorno de generador
Esta funcionalidad se basa en la funcionalidad de generador introducida
en PHP 5.5. Permite usar una instrucción return en un generador
para devolver una expresión final (el retorno por referencia no está
permitido). Este valor puede ser extraído usando el nuevo método Generator::getReturn(),
que solo puede ser usado cuando
el generador ha terminado de producir valores.
Es muy práctico poder devolver explícitamente un valor final de un generador. Esto
permite que un valor final, susceptible de ser manejado especialmente por el código cliente que
ejecuta el generador, sea devuelto por el generador (posiblemente a partir de
alguna forma de cálculo de corrutina). Esto es mucho más simple que
forzar al código cliente a verificar primero si el valor final
ha sido producido, y luego manejar específicamente el valor cuando sea el caso.
Delegación de generador
Los generadores ahora pueden ser delegados automáticamente
a otro generador, un
objeto Traversable o un array, usando yield from, sin necesidad
de recurrir a un código repetitivo.
División de enteros con intdiv()
La nueva función intdiv() devuelve el resultado de la
división de enteros realizada sobre sus operandos.
Opciones de sesión
La función session_start() ahora acepta un array de
opciones que anulan las
directivas de configuración de sesión configuradas
manualmente en el fichero php.ini.
Estas opciones también han extendido el soporte para la
opción session.lazy_write, que
está habilitada por defecto y hace que PHP sobrescriba los ficheros de sesión solo si los
datos de sesión se han actualizado, y la
opción read_and_close, que solo se puede pasar a la función session_start()
para indicar si los datos de sesión se deben leer antes de que la sesión
se cierre sin cambios.
Por ejemplo, para establecer
session.cache_limiter a
private y cerrar inmediatamente la sesión después de
leerla:
La nueva función preg_replace_callback_array() permite que
el código se escriba de manera más limpia usando la
función preg_replace_callback(). Antes de PHP 7, se
debía ejecutar una función de retrollamada por cada expresión regular, lo que requería
que dicha función de retrollamada estuviera repleta de bifurcaciones (branching).
Ahora, las funciones de retrollamada se pueden registrar para cada expresión regular usando
un array asociativo, donde la clave es una expresión regular que tiene la función de retrollamada como
valor.
Funciones CSPRNG
Se han añadido dos nuevas funciones para generar criptográficamente
integers y strings seguros de manera multiplataforma:
random_bytes() y random_int().
La función list() ahora puede desempaquetar objetos que implementan
ArrayAccess
Anteriormente, la función list() no podía operar al
100% sobre objetos que implementaban ArrayAccess.
Ahora esto ha sido corregido.
Otras funcionalidades
-
Se ha añadido acceso a los miembros de la clase (atributos y métodos) durante
la clonación. Ejemplo,
(clone $foo)->bar().