PHP 5.6: Основные нововведения

PHP 5.6 — последний насыщенный минор ветки 5.x до PHP 7: вариадические параметры, распаковка ...$args в вызовах, оператор **, импорт use function / use const, константные выражения в объявлениях, отладчик phpdbg. Для миграции важны приоритеты **, строже становятся некоторые сценарии с json, TLS и крипторасширениями.

Хаб: migration56.

Содержание


Вариадика

function sum($first, ...$rest)
{
    return $first + array_sum($rest);
}

Распаковка аргументов

$args = array(1, 2, 3);
call_user_func_array('sprintf', array_merge(array('%d-%d-%d'), $args));
// в 5.6 проще:
echo sprintf('%d-%d-%d', ...$args);

Оператор **

Правоассоциативен: 2 ** 3 ** 2 читается как 2 ** (3 ** 2). Перепроверьте старые выражения с pow().

use function / use const

Явный импорт функций и констант из пространства имён рядом с классами.

Константные выражения

Константы класса и значения по умолчанию свойств могут использовать допустимые compile-time выражения — меньше «магических» чисел.

phpdbg

Интерактивная отладка CLI-скриптов; для веба по-прежнему полагаются на Xdebug и логи.

Практические рецепты

Замените громоздкий call_user_func_array на ... там, где это уместно. Для сравнения MAC используйте hash_equals() (появилась в 5.6).

Обратная несовместимость

Подробно: migration56 incompatible** и унарные операторы, json_decode, сигнатуры mcrypt/gd/openssl, foreach по свойствам, ужесточение проверки TLS.

Deprecated

$HTTP_RAW_POST_DATA и ряд настроек — migration56 deprecated.

Прочее

Проверка узла и цепочки сертификатов для исходящих HTTPS становится менее терпимой к ошибкам конфигурации.


Итог

После стабилизации на 5.6 логично планировать переход на PHP 7.0+: типы, Throwable, производительность — дальше по этой серии гайдов.