Nuevas caracteristicas

Se han añadido los Generadores

El soporte para generadores ha sido añadido mediante la palabra reservada yield. Los generadores proporcionan una manera sencilla de implementar iteradores simples sin la carga adicional o la complejidad de implementar una clase que implemente la interfaz Iterator.

Un ejemplo sencillo que reimplementa la función range() como un generador (al menos para valores positivos de paso):

<?php
function xrange($inicio$límite$paso 1) {
    for (
$i $inicio$i <= $límite$i += $paso) {
        
yield $i;
    }
}

echo 
'Números impares de un dígito: ';

/*
 * Observe que nunca se crea o devuelve un array,
 * lo que ahorra memoria.
 */
foreach (xrange(192) as $número) {
    echo 
"$número ";
}

echo 
"\n";
?>

El resultado del ejemplo sería:

Números impares de un dígito: 1 3 5 7 9 

Se ha añadido la palabra reservada finally

Los bloques try-catch ahora admiten un bloque finally para el código que debería ejecutarse pese a si se ha lanzado una excepción o no.

Nueva API de hash de contraseñas

Se ha añadido una nueva API de hash de contraseñas que facilita el empleo de hash de forma segura y administrar contraseñas usando la misma biblioteca subyacente como crypt() de PHP. Véase la documentaicón para password_hash() para más detalles.

foreach ahora admite list()

La esctructura de control foreach ahora admite el desempaquetamiento de arrays anidados en variables por separado mediante el constructor list(). Por ejemplo:

<?php
$array 
= [
    [
12],
    [
34],
];

foreach (
$array as list($a$b)) {
    echo 
"A: $a; B: $b\n";
}
?>

El resultado del ejemplo sería:

A: 1; B: 2
A: 3; B: 4

Hay disponible más información en la página del manual de foreach.

empty() admite expresiones arbitrarias

Ahora se admite pasar una expresión arbitraria en lugar de una variable a empty(). Por ejemplo:

<?php
function siempre_falso() {
    return 
false;
}

if (empty(
siempre_falso())) {
    echo 
"Esto se imprimirá.\n";
}

if (empty(
true)) {
    echo 
"Esto no se imprimirá.\n";
}
?>

El resultado del ejemplo sería:

Esto se imprimirá.

array and string literal dereferencing

Los arrays y los literales de tipo string ahora se pueden derreferenciar directamente para acceder a elementos y caracteres individuales:

<?php
echo 'Derreferencición de array: ';
echo [
123][0];
echo 
"\n";

echo 
'Derreferencición de string: ';
echo 
'PHP'[0];
echo 
"\n";
?>

El resultado del ejemplo sería:

Derreferencición de array: 1
Derreferencición de string: P

Resolución del nombre de una clase mediane ::class

Es posible usar NombreClase::class para obtener el nombre de clase completamente cualificado de NombreClase. Por ejemplo:

<?php
namespace Espacio\De\Nombres;
class 
NombreClase {}

echo 
NombreClase::class;

echo 
"\n";
?>

El resultado del ejemplo sería:

Espacio\De\Nombres\NombreClase

Se añadió la extensión OPcache

La caché de códigos de operación de Zend Optimiser+ se ha añadido a PHP como la nueva extensión OPcache. OPcache mejora el rendimiento de PHP almacenando código de byte de un script precompilado en la memoria compartida, eliminando así la necesidad por parte de PHP de cargar y analizar scripts en cada petición. Véase las instrucciones de instalación para más detalles de cómo habilitar y usar OPcache.

foreach ahora admite claves no escalares

foreach ahora admite claves de cualquier tipo. Aunque las claves no escalares no pueden darse en arrays nativos de PHP, es posible que Iterator::key() devuelva un valor de cualquier tipo, por lo que ahora serán tratados correctamente.

Manejador de Apache 2.4 soportado en Windows

La SAPI del manejador de Apache 2.4 ahora está soportada en Windows.

Mejoras a GD

Se han realizado varias mejoras a la extensión GD, las cuales son: