Релиз PHP 5.5.0

Спустя год и три месяца с момента выхода прошлой ветки PHP представлен новый значительный релиз языка программирования PHP 5.5.0. В версии PHP 5.5.0 добавлены новые языковые конструкции, обеспечена поддержка сопрограмм и генераторов, представлен новый API для хэширования паролей, удалены устаревшие возможности и интегрирован Zend OPcache (бывший Zend Optimizer+). Основные особенности PHP 5.5.0:

В состав включена система кэширования и оптимизации байткода Zend OPcache (бывший Zend Optimizer+), ранее поставляемая в составе проприетарного пакета Zend Server, но недавно переведённая компанией Zend Technologies в разряд свободных проектов. Zend OPcache предоставляет средства для ускорения выполнения скриптов на языке PHP за счёт использования техники кэширования опкода и применения дополнительных оптимизаций. Предкомпилированный код скриптов кэшируется в разделяемой памяти, что позволяет избежать выполнения стадий чтения с диска, разбора и компиляции исходного кода скриптов при их повторном запуске. Кроме того, Zend OPcache включает дополнительные методы оптимизации при генерации байткода, что позволяет достичь ускорения и за счёт более быстрого выполнения байткода. По сравнению с конкурирующей системой APC, Zend OPcache выигрывает по производительности в среднем на 5–20%, обеспечивает лучшую совместимость с различными ветками и возможностями языка PHP, а также содержит средства для выявления повреждения данных (например, из-за некорректно написанной PHP-функции на языке C).

Добавлен новый API для хэширования паролей, предоставляющий застрахованные от ошибок разработчиков и более простые в использовании высокоуровневые функции для генерации и проверки валидности паролей по хэшам. Основное отличие нового API в том, что он берёт на себя генерацию надёжных хэшей, скрывая от разработчика операции ручного указания salt-а и выбора алгоритма хэширования (по умолчанию используется Bcrypt). Создание хэша сведено к выполнению »$hash = password_hash ($password, PASSWORD_DEFAULT);», а проверка к вызову «password_verify ($password, $hash)». В качестве причины внедрения нового API называется безалаберное отношение многих разработчиков к генерации salt-ов и повсеместный выбор нестойких к перебору алгоритмов хэширования; Поддержка сопрограмм (coroutine) и генераторов (generator), предоставляющих простой и не требующий создания шаблонов способ реализации итераторов; Поддержка ключевого слова «finally», расширяющего возможности блоков исключений try/catch и выполняемого после завершения выполнения блока try, что гарантирует, что заданный в секции finally код будет выполнен в последнюю очередь после всех остальных обработчиков исключений; Поддержка указания list () внутри блока foreach (), что позволяет организовать не требующий создания отдельных временных переменных перебор масивов (например, «foreach ($array as list ($a, $b)){…}»); Возможность разыменования констант для строк и массивов (например, «echo 'PHP'[0]» или «echo [1, 2, 3][0]»); Поддержка разрешения имён скалярных классов через ключевое слово »:: class» (например, «echo ClassName: class»); Библиотека GD обновлена до версии 2.1, в которой добавлены новые функции (например, imageflip), улучшена работа доступных ранее возможностей (imagecrop и imagecropauto) и добавлена поддержка формата WebP (функции imagecreatefromwebp, imagewebp); Улучшение модуля ext/intl со средствами интернационализации; Возможность использования empty () и isset () над результатом работы функции и произвольными выражениями (например, empty (foo ())); Добавлен метод Generator: throw (); Реализована серия новых функций в расширении cURL; Добавлена поддержка атрибута Max-Age в setcookie (); Поддержка системы трассировки Systemtap на платформе Linux; Оптимизация доступа к временным и компилированным переменным на уровне VM, что позволило сократить число обращений к памяти на 8%; В php.ini добавлена опция для изменения пути ко временной директории PHP; Добавлены функции mysqli_begin_transaction ()/mysqli: begin_transaction (); Реализованы все опции mysqli_commit ()/mysqli_rollback (), которые могут быть использованы с START TRANSACTION, COMMIT и ROLLBACK в MySQL 5.6; Добавлены функции-врапперы recvmsg () и sendmsg () для ext/sockets; Добавлена функций array_column, которая возвращает запрошенный столбец из многомерного массива; Добавлена возможность использования нескалярных итераторов в качестве ключа в цикле foreach (например, «foreach ($iter as $k => $v)»); Добавлена поддержка изменения названия процесса через CLI/CLI-Server SAPI функцию cli_set_process_title ($title); Поддержка работы SAPI-обработчика Apache 2.4 на платформе Windows; Изменения, нарушающие совместимость: Реализация игнорирование регистра символов в именах функций, классов и констант теперь не привязывается к локали, а определяется в соответствии с правилами ASCII; Прекращение поддержки Windows XP и Windows 2003. Прекращение поддержки устаревших функций: php_logo_guid (), php_egg_logo_guid (), php_real_logo_guid (), zend_logo_guid (); Особенности работы функций pack () и unpack () приведены в соответствие с реализацией из состава Perl; Прекращена поддержка функции php_logo_guid; Расширение ext/mysql объявлено устаревшим, вместо него следует использовать MySQLi или PDO_MySQL.

© OpenNet