Реклама ООО Таймвэб
Реклама ООО Таймвэб
Реклама ООО Таймвэб

Обзор PHP 7

Обсудить
Обзор PHP 7

О языке PHP

PHP – это язык программирования, который в основном применяется в веб-разработке, как правило, в части back-end. PHP имеет достаточно длинную историю – его первая версия появилась более 20 лет назад, в 1995 году. За это время было выпущено 7 версий PHP, последняя из которых появилась в декабре 2015 года. О ней и пойдет речь в этой статье.

PHPNG

Релиз PHP 7.0 стал в своем роде прорывом, так как он основывался на phpng – экспериментальном и активно развивающимся проекте PHP, название которого расшифровывается как “PHP Next Generation” – «Следующее поколение PHP». Данную технологию можно было использовать и в предыдущих версиях PHP, однако именно в PHP 7 она была введена как основополагающая. При ее разработке была поставлена цель повысить производительность PHP, но при этом не потерять совместимость.

Zend Engine

PHP 7 основан на третьей версии Zend Engine, в которой был развит проект phpng.

Нововведения

В первую очередь новшества в PHP 7 коснулись самых важных для разработки приложений параметров – это производительность и потребление памяти.

Основное изменение, о котором в первую очередь упоминают в разговоре о PHP 7, это улучшение производительности: показатели PHP 7 приближены к показателям HHVM (разработанной Facebook системы, которая позволяет ускорить преобразование PHP-кода в несколько раз). Не последней причиной этого стало то, что соучредитель Zend Technologies (компании-разработчика ядра PHP) Зеев Сураски рассматривает HHVM как одного из конкурентов Zend. А ведущий разработчик PHP 7 компании Zend Technologies и автор phpng Дмитрий Стогов заверяет, что разница в производительности PHP 5.0 и PHP 7 на синтетическом тесте bench.php составляет 14 раз. На практике большинство пользователей склоняются к мнению, что PHP 7 примерно в два раза быстрее предыдущей версии.

HHVM использует так называемую JIT (Just-In-Time) компиляцию для преобразования кода – несмотря на то, что JIT в 7 версии PHP не появился, PHP 7 поддерживает более хорошую миграцию, которая и позволяет улучшить производительность в разы. Именно новый уровень производительности Дмитрий Стогов выделяет в качестве главной особенности PHP 7.

Улучшение производительности удалось добиться и благодаря тому, что компилятор теперь генерирует более эффектный и короткий байт-код.

В наше время крайне важно думать о пользователях не только стационарных, но и мобильных устройств, поэтому разработчики PHP 7 улучшили исполнения движка и снизили потребление памяти, а также добавили возможность использовать нативное локальное хранилище. К тому же PHP 7 позволяет выполнять асинхронные задачи.

Кстати, при разработке учитывались и популярные тенденции по сокращению потребления ресурсов планеты, поэтому PHP 7 имеет возможность обрабатывать больше трафика, используя все те же ресурсы сервера.

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться

Новые функции

В PHP 7 есть множество новых функций, каждая из которых делает разработку более удобной и простой. Далее вы можете ознакомиться с некоторыми из них.

  • Два новых класса исключений (Exception и Error) – если в предыдущих версиях PHP нельзя было обрабатывать фатальные ошибки, то в новом релизе приводящие к этому действия выбрасывают исключения, то есть завершение скрипта не произойдет.
  • Анонимные классы – теперь PHP 7 поддерживает этот вид классов, который часто используют в C++ и Java для выполнения callback-функций. Эти классы в основном используются для создания простых элементов:
<?php

// Pre PHP 7 code
class Logger
{
 public function log($msg)
 {
 echo $msg;
 }
}

$util->setLogger(new Logger());

// PHP 7+ code
$util->setLogger(new class {
 public function log($msg)
 {
 echo $msg;
 }
});

Анонимные классы могут быть вложенными, но при этом им не будут доступны protected или private-свойства внешнего класса.

  • Возможность указывать скалярные типы (Scalar Type Hints) - в предыдущих версиях PHP можно было указывать тип принимаемых значений; теперь вы также можете указывать и скалярные типы:
строки (`string`), 
целые (`int`), 
числа (`float`), 
бульки (`bool`).

Это нововведение направлено на облегчение написания кода и улучшение его читабельности. А вот использование этих значений в качестве имен классов категорически запрещено, т.к. это может привести к критическим ошибкам.

  • Сокращенная конструкция use - в PHP 7 появилась возможность объединять декларирование групп use, что, несомненно, положительно отразится как на скорости работы, так и на восприятии кода:

Сравнение PHP 5 и PHP 7

  • Новые операторы Null coalescing operator (??) и Combined Comparison Operator (<=>, также он известен как Spaceship Operator) – эти два новых оператора, которых некоторые относят к синтаксическому сахару, помогут написать более лаконичный и понятный код.

Null coalescing operator – это оператор объединения, который проверяет, существует ли переменная, и возвращает ее значение (либо значение по умолчанию):

$action = $_POST['action'] ?? 'index';

Combined Comparison Operator – это оператор сравнения, который пригодится для использования в callback-функциях для usort(). Он сравнивает два значения и, в зависимости от результата, возвращает -1, 0 или 1:

function order_func($a, $b) {
 return $a <=> $b;
}

Приоритет данной операции равен приоритетам других операций сравнения, при этом его нельзя связать с предыдущим вызовом, т.к. это неассоциативный оператор.

  • Функция assert() - в PHP 7 эта функция обрабатывается особым образом для того, чтобы были исключены накладные расходы; вы можете использовать ее для отладки, а в дальнейшем отключать.
  • Фильтрация unserialize() – это новшество обеспечит безопасность сериализации объектов. Разработчик сам сможет определить, какие классы должны подвергнуться обработке, а какие нет.
  • Представление целых чисел в виде 64-битных в PHP 7 для Windows x64: теперь PHP поддерживает строки длиной больше 231 байт в 64-битных сборках.
  • Делегирование генераторов – при помощи <expr> сложный генератор можно разделить на несколько более мелких. Как и некоторые другие нововведения, данное новшество направлено на написание более чистого и удобного для повторного использования кода.
  • Появление нового класса IntlChar – он увеличивает набор возможностей библиотеки для локализации приложений International Components for Unicode и имеет методы класса и константы для работы с Unicode.
  • Возможность определять массивы как значения констант, которые объявляются через define().
  • Возможность присваивать зарезервированные ключевые слова именам методов.
  • Появление нового идентификатора простых значений PHP_INT_MIN.

Что касается старых функций, то часть самых невостребованных возможностей была исключена: к примеру, были удалены ASP и script-теги, а также регулярные выражения, совместимые с POSIX, и расширение ext/mysql.

PHP и веб-серверы

PHP широко применяется при написании множества веб-приложений, т.к. этот язык совместим с различными веб-серверами (Apache, Nginx, IIS), базами данных (MySQL, Postgre, MongoDB и т.д.), а также операционными системами.
Поэтому уже традиционно нововведения коснулись не только языка в целом, но и тех его сторон, которые связаны с хостингом.

В первую очередь в PHP 7 было введено Abstract syntax tree (AST) – абстрактное синтаксическое дерево, которое является промежуточным звеном в компиляционном процессе. Именно на этой модели теперь основан синтаксический анализатор. Благодаря этому теперь можно создавать более производительный операционный код.

Еще одним нововведением является Uniform Variable Syntax – универсальный синтаксис для переменных. Это позволяет, с одной стороны, решить часть несоответствий, которые связаны с вычислением значений переменных, но, с другой стороны, создает необходимость переписывать некоторые редко используемые части кода.

Еще раз вернемся к увеличению производительности PHP 7: это благоприятно отразиться на функционале всех хостингов, ведь они смогут увеличить количество своих пользователей без увеличения количества серверов или других улучшений.

Одной из причин повышения производительности является оптимизация структуры внутренних данных, что значительно улучшило процесс работы с памятью.

Нельзя не сказать о некоторых проблемах обратной совместимости, которые могут возникнуть при переходе на PHP 7. Например, теперь нельзя использовать несколько выражений default в switch, т.к. в противном случае вы увидите ошибку. Однако в целом эти проблемы незначительны на фоне тех новых возможностей, которые предлагает PHP 7.

Вывод

Релиз PHP 7 – это не просто выпуск новой версии PHP, но определенная отправная точка для следующих PHP-версий нового поколения. Результатами множества нововведений PHP 7 стал более чистый, удобный и понятный код, значительно увеличенная продуктивность и многое другое, что вы можете самостоятельно оценить, обновив виртуальный сервер до седьмой версии PHP.

Hello World! Гайды и обзоры для девелоперов разных мастей.

Комментарии

С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте