Релиз PHP 7: Ключевые особенности и что нужно знать разработчику
Если вы разработчик, наверняка знаете: feature-complete бета PHP 7 уже вышла. Версия 7.0.0 приносит множество крутых фич. Но не рекомендуем использовать в продакшене до стабильного релиза (ожидался ноябрь 2015). Свободно тестируйте бета-версию и репортьте баги. Ниже — все изменения в PHP 7.0.0.
16. Это PHP 7 (не 6)
Текущая стабильная — PHP 5.6. Многие ждали 6.0. Но PHP 6 уже существовал как эксперимент, но не дошёл до продакшена. Кор-команда решила пропустить номер 6 для следующего мажорного релиза.
15. Поддержка 64-битных Windows
Текущий PHP не даёт 64-битные целые или поддержку больших файлов. PHP 7 вводит последовательную 64-битную поддержку: нативные 64-битные целые и большие файлы.
14. Удаление устаревших функций и расширений
Главная цель PHP 7 — освободить память для улучшений, поэтому убрали старые неподдерживаемые серверные API, расширения и депрекейт-функционал. Удалённое давно не использовалось. Но если у вас легаси на старых версиях — апгрейд может сломать код.
13. Групповые use-декларации
RFC для улучшения неймспейсов: концепция групповых деклараций. Полезно, если импортируете много классов из одного неймспейса. Новый синтаксис убирает вербозность, делает код чище, экономит время на 타이пинг.
12. Анонимные классы
Концепция уже есть в Java и C#. Класс без имени — ускоряет кодинг и выполнение. Используйте, когда класс нужен один раз за выполнение и не требует документирования.
11. Унифицированный синтаксис переменных
Решает несовместимости в вычислении выражений. Например, вызов замыкания, присвоенного свойству: ($object->closureProperties)(), а также чейнинг статических вызовов.
В старых версиях $obj->$properties['name'] обращался к свойству, имя которого в ключе 'name' массива properties. Теперь — к ключу 'name' свойства, имя которого в $properties.
10. Unicode Codepoint Escape Syntax
Новый escape-символ (\u) позволяет задавать Unicode code points (в hex) однозначно внутри строк. Не можете набрать эмодзи — используйте escape-последовательность.
9. Общий родительский класс в обработке исключений
Для PHP-кодеров фатальные и перехватываемые фатальные ошибки всегда были проблемой. Новые Engine Exceptions позволяют заменять их на исключения. Для перехвата и традиционных, и engine-исключений введён общий родительский класс \BaseException.
8. Bind Closure on Call
Closure::bind() и Closure->bindTo() позволяют менять биндинг $this и вызывающей области видимости, создавая дубликат замыкания. В PHP 7 — простой способ сделать это в момент вызова, биндя и $this, и область видимости к одному объекту через Closure->call(). Метод принимает объект первым аргументом, затем аргументы для замыкания.
7. Оператор Null Coalesce (??)
Возвращает первый операнд, если он существует и не NULL, иначе — второй. Полностью безопасен: не вызывает E_NOTICE, даже если значения нет.
6. Оператор комбинированного сравнения (Spaceship)
Похож на version_compare() или strcmp(), но работает для всех общих PHP-значений. Есть в Ruby и Perl. Возвращает -1 если левый операнд меньше, 0 если равны, 1 если левый больше.
5. Generator Return Expression и Generator Delegation
Generator return expression позволяет вернуть значение при успешном завершении генератора. В PHP 7: $generator->getReturn() для получения возвращённого значения. Если генератор не вернул или бросил исключение — кидает исключение. Если завершился без return — NULL.
Generator delegation позволяет возвращать другую итерируемую структуру (итератор, массив, другой генератор). Итерация подструктуры делается внешним циклом, а не рекурсивно.
4. Объявления типов возврата
Многие хотят объявлять тип возвращаемого значения функции. Предотвращает нежелательные возвраты и подтипы, ломающие ожидаемый тип супертипа, особенно в интерфейсах. PHP 7 добавляет 4 новых скалярных типа: string, int, float, bool — можно указать ожидаемый возврат integer, float, string, boolean.
3. Abstract Syntax Tree (AST)
Самое большое невидимое изменение — добавление AST: промежуточное представление кода при компиляции. Заменяет прямую эмиссию опкодов из парсера. Убирает хаки, делает реализацию понятнее и поддерживаемее. Позволяет синтаксис, невозможный с single-pass компиляцией.
2. Новый Zend Engine
Первый Zend Engine — 1999 в PHP 4. Открытый скриптовый движок (на C), интерпретирующий PHP. Текущий использует Zend Engine II: управление памятью/ресурсами, расширяемая объектная модель, значительный производительный буст. Новый Zend Engine III (кодовое имя phpng) — в разработке для PHP 7.
1. Производительность + Экономия памяти
Главная причина апгрейда — производительность. Хорошая новость для мелких хостеров: смогут хостить больше клиентов на том же железе. Производительность на уровне Facebook HHVM (JIT-компиляция в рантайме). Существенная экономия памяти за счёт оптимизации внутренних структур данных.
По графику Zend: WordPress-запрос на PHP 5.6 выполняется за <100M CPU-инструкций, PHP 7 — только 25M. Тесты: 3x Magento-транзакций на том же железе, Drupal 8 — на 72% быстрее на PHP 7.
Рекомендуется: 30 потрясающих PHP-библиотек для программистов и разработчиков
Промышленные технологии
- Eclipse Ditto 1.0 — платформа Device-as-a-Service для разработки Digital Twin
- Как стать ведущим поставщиком производства: 7 проверенных советов для рыночного лидерства
- Использование инноваций цепочки поставок для борьбы с COVID‑19
- Три ключевые стратегии повышения безопасности рабочих в промышленных условиях
- Concrete Collective повышает интерьеры с Fusion 360 Nesting & Fabrication Extension
- Повышение промышленной эффективности с BLE-базированными системами реального времени локализации (RTLS)
- От MVP к прибыли: масштабируйте продукт в машину для генерации выручки
- Как напольные коврики повышают продуктивность на рабочем месте: 5 доказанных выгод
- Выбор идеального твердосплавного круглого инструмента для пиковой производительности обработки
- Продвинутые высокопрочные стали: определение, преимущества и автомобильные применения