Была добавлена поддержка генераторов через ключевое слово 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. OPcache увеличивает производительность PHP путем кеширования предварителльно скомпилированного байт-код скрипта в разделяемой памяти, что позволяет избежать загрузки и компиляции одних и тех же скриптов при каждом к ним обращении. Читайте инструкции по установке для более полной информации об установке и использовании OPcache.
foreach теперь поддерживает ключи любого типа. Так как не скалярные ключи не могут возникнуть в обычном массиве, эту функциональность можно использовать с методом Iterator::key(), который может вернуть значение любого типа. Теперь эти значения будут обрабатываться корректно.
SAPI обработчик Apache 2.4 теперь поддерживается в Windows.
Несколько улучшений добавлено в расширение GD: