Релиз PHP 5.5.0
21 июня 2013 года
Спустя год и три месяца с момента выхода прошлой ветки 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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.