Представлен новый значительный релиз языка программирования PHP 5.6.0. В версии PHP 5.6.0 добавлены константные скалярные выражения, функции с переменным числом аргументов, импорт функций и констант при помощи оператора use, оператор возведения в степень, интерактивный отладчик phpdbg. Следующим шагом развития языка PHP станет воплощение идей по существенному увеличению производительности движка Zend Engine и изменению методов работы с памятью, развиваемых в рамках экспериментальной ветки PHPNG.

Ключевые новшества:

  • Константные скалярные выражения (constant scalar expressions), допускающие применение операций над числовыми или строковыми литералами и константами в контексте, предусмотренном для статических значений, таком как определение констант или значений по умолчанию аргументов функций. Например, "const ONE = 1; const TWO = ONE + 1;"
  • Функции с переменным числом аргументов (Variadic function), при определении которых явно не указывается число передаваемых аргументов. Например, функцию "function f($req, $opt = null, ...$params)" можно вызывать как f(1, 2), f(1, 2, 3, 4, 5) и т.п., где $req является обязательным аргументом, $opt - опциональным, а все дополнительные аргументы передаются в форме массива $params.
  • Распаковка массивов или перечисляемых объектов в вид набора аргументов при вызове функции, используя оператор "...". Например, "$operators = [2, 3]; echo add(1, ...$operators);", где add является функцией трёх аргументов;
  • Возможность использования оператора use для импорта функций и констант, в дополнение к импорту классов. Например, "namespace { use function Name\Space\f;...." для импорта в текущее пространство имён функции f, определённой в пространстве имён Name\Space;
  • Новый интерактивный отладчик phpdbg, выполненный в форме модуля SAPI;
  • Возможность повторного использования ввода php://input, который теперь может быть переоткрыт и прочитан более одного раза. Изменение также привело к значительному сокращению потребления памяти при обработке данных, переданных через метод POST. Переменная $HTTP_RAW_POST_DATA причислена к устаревшим возможностям;
  • Для объектов GMP обеспечена возможность перегрузки оператора и приведения скалярных типов;
  • Поддержка загрузки файлов размером больше 2GiB;
  • Добавлен новый математический оператор "**", применяемый для возведения в степень. Например, "$a ** $b" - возвести $a в степень $b;
  • Улучшение поддержки SSL/TLS. В частности, в расширении OpenSSL добавлена возможность извлечения и проверки подписи (fingerprint) сертификатов. Для извлечения подписи из сертификатов X.509 добавлена функция openssl_x509_fingerprint(). Для SSL-потоков добавлены две контекстные опции: capture_peer_cert для захвата сертификата X.509 и peer_fingerprint для проверки его соответствия заданной подписи. Кроме того, добавлена поддержка выбора криптографических методов, таких как SSLv3 и TLS, через установку контекстной опции crypto_method, поддерживающей значения STREAM_CRYPTO_METHOD_SSLv2_CLIENT, STREAM_CRYPTO_METHOD_SSLv3_CLIENT, STREAM_CRYPTO_METHOD_SSLv23_CLIENT (по умолчанию) и STREAM_CRYPTO_METHOD_TLS_CLIENT;
  • Поддержка алгоритма хэширования gost-crypto;
  • Добавлен новый скрытый метод __debugInfo(), предоставляющий дополнительную отладочную информацию для объекта;
  • В FPM SAPI реализована опция конфигурации clear_env для очистки переменных окружения;
  • Новые функции hash_equals() и opcache_is_script_cached();
  • Упрощена обработка кодировки на выходе через использование в качестве кодировки по умолчанию значения default_charset;
  • В расширение mysqlnd добавлен новый метод извлечения данных, примечательный меньшим потреблением памяти за счёт большего числа операций копирования блоков памяти;
  • В расширение PCRE добавлена поддержка маркеров;
  • В расширение Pgsql добавлена поддержка выполнения запросов и соединений в асинхронном режиме;
  • Изменения, нарушающие совместимость:
    • Ключи массива не могут быть перезаписаны при определении массива в качестве свойства класса с использованием литерала array;
    • Обеспечена более строгая проверка синтаксиса JSON в функции json_decode();
    • Обвязки для потоков теперь по умолчанию выполняют верификацию сертификата и имени хоста пира при использовании SSL/TLS;
    • Все ресурсы GMP теперь являются объектами;
    • Расширение mcrypt теперь требует указания корректных ключей и векторов инициализации.


Источник: http://www.opennet.ru/opennews/art.shtml?num=40480