Релиз языка программирования PHP 7.3

После года разработки представлен релиз языка программирования PHP 7.3. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость.

Ключевые улучшения в PHP 7.3:

  • Реализован гибкий синтаксис многострочной вставки (строки heredoc и nowdoc), не требующий обязательного перевода строк после маркера окончания блока и допускающий выравнивание отступами;
  • Добавлена поддержка назначения ссылок в list (): теперь поддерживается синтаксис «list ($a, &$b) = $array;», эквивалентный присвоению »$a = $array[0]; $b =& $array[1];». Предложен также упрощённый синтаксис присвоения, позволяющий указывать вместо «list ()» квадратные скобки, например »[$a, &$b] = $array;»
  • При вызове функций и методов теперь допускается оставление запятых в конце списка аргументов, например, «unset ($foo, $bar, $baz,)»;
  • Расширение PCRE переведено на ветку PCRE2;
  • Выражение «instanceof» теперь допускает указание литералов в качестве первого операнда (в такой ситуации результат всегда будет FALSE);
  • Добавлено новое исключение CompileError, наследуемое от ParseError и генерирующее для некоторых типов ошибок перехватываемое событие CompileError вместо фатальной ошибки;
  • Значительно расширены возможности и увеличена производительность дополнения MBString, в том числе добавлены полноценные средства для манипуляций с регистром символов (MB_CASE_LOWER, MB_CASE_UPPER, MB_CASE_TITLE, MB_CASE_FOLD и т.п.), до версии 11 обновлена поддержка спецификаций Unicode, добавлена поддержка строк, размером больше 2 Гб, в функциях mb_ereg_*() добавлена поддержка именованного захвата элементов. Объявлены устаревшими вызовы mbereg_*(), вместо которых следует использовать corresponding mb_ereg_*();
  • В SAPI-модуль FPM добавлены новые глобальные опции log_limit и log_buffering для ограничения размера выводимой в лог строки и включения режима записи в лог без буферизации. Также добавлена опция decorate_workers_output, позволяющая отключить декорирование вывода от рабочих процессов при активации режима catch_workers_output;
  • В расширении LDAP в большинстве функций, таких как ldap_add и ldap_read, появился параметр serverctrls для отправки на сервер дополнительных сообщений (LDAP Controls — механизм расширения операций LDAP и передачи дополнительной информации вместе с запросом), а в ldap_parse_result для получения клиентом дополнительных сообщений от сервера. Налажена поддержка режимов LDAP_OPT_SERVER_CONTROLS и LDAP_OPT_CLIENT_CONTROLS в функциях ldap_get_option и ldap_set_option;
  • В заголовок страницы phpinfo (), добавлено отображение переменной PHP_VERSION;
  • В расширение Date добавлен метод DateTime: createFromImmutable ();
  • В расширение GD в функции imagecreatefromstring () появилась поддержка создания изображений в формате WebP;
  • При сборке с опцией configure --with-password-argon2 в функциях password_hash (), password_verify (), password_get_info () и password_needs_rehash () обеспечена поддержка алгоритмов хэширования паролей Argon2i и Argon2id;
  • Добавлена функция hrtime () для вывода значения времени (число секунд и наносекунд) на основании показаний монотонного таймера, отражающего неразрывно увеличивающееся время, прошедшее с определённого момента в прошлом;
  • Представлена новая функция net_get_interfaces () для получения информации о доступных сетевых интерфейсах;
  • Улучшена работа сборщика мусора;
  • Переписана на PHP утитила ext_skel (генерирует шаблоны кода дополнений), для запуска которой теперь не нужно дополнительных зависимостей и её можно запускать в том числе в Windows ('php ext_skel.php');
  • Объявлено устаревшим определение имён констант не чувствительных к регистру (определялись при помощи указания в define специального флага).
  • Приведены к соответствию с поведением Unix операции открытия файлов в Windows: файловые дескрипторы теперь по умолчанию открываются в Windows в режиме, допускающем чтение, запись и удаление (открытые файлы теперь можно удалить);
  • Прекращена поддержка платформы BeOS.

© OpenNet