Была добавлена поддержка генераторов использующих ключевое слово yield. Генераторы предоставляют простое решение для реализации простых итераторов без просадки производительности и создания полноценного класса реализующего интерфейс Iterator.
Простой пример реализации итератора из функции range() (по крайней мере, для положительных значений step):
<?php
function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}
echo 'Нечетные числа меньше 10: ';
/*
* Никакого массива создано и возвращено не будет,
* все сохраняется в памяти.
*/
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";
}
echo "\n";
?>
Результат выполнения данного примера:
Нечетные числа меньше 10: 1 3 5 7 9
Блоки try-catch теперь поддерживают блок finally, который будет выполнен в любом случае, было ли выброшено исключение или нет.
Новое API хеширования паролей позволяет более просто создавать и управлять безопасными хешами паролей и базируется на той же библиотеке, что и функция crypt(). Подробности можно узнать в документации к функции password_hash().
Цикл foreach теперь поддерживает распаковку вложенных массивов в отдельные переменные с помощью конструкции list(). К примеру:
<?php
$array = [
[1, 2],
[3, 4],
];
foreach ($array as list($a, $b)) {
echo "A: $a; B: $b\n";
}
?>
Результат выполнения данного примера:
A: 1; B: 2 A: 3; B: 4
Более подробно это нововведение описано на странице посвященной foreach.
Реализована возможность передавать произвольные выражения в empty(). Пример:
<?php
function always_false() {
return false;
}
if (empty(always_false())) {
echo "Это будет напечатано.\n";
}
if (empty(true)) {
echo "Это не будет напечатано.\n";
}
?>
Результат выполнения данного примера:
Это будет напечатано.
Литералы array и string теперь могут быть разыменованы напрямую для доступа к конкретным элементам и символам:
<?php
echo 'Разыменовывание массива: ';
echo [1, 2, 3][0];
echo "\n";
echo 'Разыменовывание строки: ';
echo 'PHP'[0];
echo "\n";
?>
Результат выполнения данного примера:
Разыменовывание массива: 1 Разыменовывание строки: P
Теперь можно использовать конструкцию ClassName::class для получения полностью определенного имени класса ClassName. К примеру:
<?php
namespace Name\Space;
class ClassName {}
echo ClassName::class;
echo "\n";
?>
Результат выполнения данного примера:
Name\Space\ClassName
Был добавлен кеш байткода Zend Optimiser+ в новомрасширении OPcache extension. OPcache увеличивает производительность PHP путем кеширования прекомпилированный байткод скрипта в разделяемой памяти, что позволяет избежать загрузки и компиляции одних и тех же скриптов при каждом к ним обращении. Читайте инструкции по установке для более полной информации об установке и использовании OPcache.
foreach теперь поддерживает ключи любого типа. Так как не скалярные ключи не могут возникнуть в обычном массиве, эту функциональность можно использовать с методом Iterator::key(), который может вернуть значение любого типа. Теперь эти значения будут обрабатываться корректно.
SAPI обработчик Apache 2.4 теперь поддерживается в Windows.
Несколько улучшений добавлено в расширение GD: