Ya hay fecha oficial para el lanzamiento de la versión estable 5.6 de PHP: 28 de agosto de 2014. El próximo jueves estará disponible esta nueva versión que si bien no aporta muchos cambios, los que vienen son interesantes y muy necesarios desde hacía tiempo. La retrocompatibilidad con versiones anteriores es casi plena puesto que apenas se han producido cambios de este tipo (ver al final).
Nuevas características
Expresiones en constantes
Previamente a PHP 5.6, era imposible asignar a una constante un valor que no fuera estático. A partir de ahora, se podrán usar expresiones:
const A = 5;
const B = 5 * 2;
const C = A * 2;
echo A;
echo B; // Sólo PHP 5.6
echo C; // Sólo PHP 5.6
Funciones variádicas
Para obtener un número indeterminado de argumentos en una función, anteriormente teníamos que hacer uso de func_get_args
:
{
$args = ;
;
}
;
Y si queríamos identificar parámetros requeridos y opcionales, o bien nos encargábamos de ello manualmente dentro de la función, o teníamos que especificar una lista de argumentos en la declaración de la función:
{
;
}
;
El problema de esto es que o ensuciamos el código, o tenemos que especificar una lista argumentos, algo imposible si no sabemos cuántos argumentos hay (lo cual solo deja la primera opción).
Con 5.6 esto se resuelve mediante las funciones variádicas y el operador ...
. Veamos un ejemplo:
{
;
}
;
Como véis es muy sencillo, podemos especificar cuáles son requeridos y cuáles opcionales. Y por supuesto utilizar function getArgs(...$args)
si así lo queremos.
Desempaquetar argumentos
El operador ...
también sirve para desempaquetar argumentos en arrays y objetos Traversable. Vamos a verlo con un ejemplo:
{
return $a + $b + $c;
}
;
Esto por supuesto funciona en PHP 5.5 y anteriores. Pero, ¿que pasaría si quisiéramos utilizar un array para pasar los valores? Que tendríamos que recurrir a call_user_func_array
:
{
return $a + $b + $c;
}
$numbers = [2, 4, 6];
;
No muy elegante a decir verdad, pero al igual que con las funciones variádicas, también podemos utilizar el operador ...
para indicar una lista indeterminada de argumentos:
{
return $a + $b + $c;
}
$numbers = [2, 4, 6];
;
Esto, en conjunción con function sum(...$numbers)
, nos otorga un dinamismo puro y duro.
Nuevo operador de exponenciación
Mediante el nuevo operador **
y su asignación corta **=
podemos realizar exponenciación, algo que antes dependía de la función pow
:
$x = 2 ** 3;
$y = 2;
$y **= 3;
echo $x; // 8
echo $y; // 8
La exponenciación se realiza de derecha a izquierda.
Ampliación del operador use
El operador use
ahora permitirá importar funciones y constantes mediante use const
y use function
(antes solo se podían importar clases). Por ejemplo, en el siguiente namespace
:
Lo que antes debía ejecutarse así:
Ahora podrá ejecutarse de la siguiente manera:
Reutilización de php://input
Leer php://input
en versiones anteriores solo se podía realizar una sola vez. A partir de ahora esto cambia y podrá leerse el flujo de datos tantas veces como se quiera. Además, esta mejora decrementa el uso de memoria requerida para leer datos POST, lo cual aumenta la eficiencia.
phpdbg
Desde PHP 5.4, phpdbg es una plataforma de depuración ligera y robusta, que ahora vendrá de serie en PHP 5.6 implementado como un módulo SAPI. Para más información, phpdbg.com.
Otras mejoras
Otras mejoras han sido introducidas en PHP 5.6:
- En funciones que emplean codificación específica, ahora se utiliza
default_charset
por defecto, quedándose obsoleta la codificación de carácters medianteiconv
ymbstring
. - Ahora se permiten subidas de ficheros mayores a 2 gigabytes.
- Los objetos GMP ahora soportan la sobrecarga de operadores y la conversión a tipos escalares. Lo que antes era
gmp_add(gmp_init(10), gmp_init(20))
ahora puede hacerse mediantegmp_init(10) + gmp_init(20)
. - La nueva función
hash_equals
permite comparar strings con seguridad contra ataques de temporización. - Se ha añadido el algoritmo de hash gost-crypto.
- Mejoras en SSL/TSL. Más información en cambios de OpenSSL en PHP 5.6
- La extensión pgsql ahora admite conexiones y consultas asíncronas, evitando el bloqueo al interactuar con bases de datos de PostgreSQL. Habilitando la constante
PGSQL_CONNECT_ASYNC
, se podrán utilizar las funciones asíncronaspg_connect_poll
,pg_socket
,pg_consume_input
ypg_flush
.