В каком году вышел php 7. Объявление скалярных типов

Стоит ли переходить на новую версию PHP 7.0 ? – Однозначно стоит, даже не думайте - переходите!

В седьмой версии достаточно много нововведений. Основные из них:

  • в основе ядра PHP 7 используется PHPNG . Новое ядро дает прирост производительности сайтам от 40%;
  • type Hints и возвращаемые значения . Теперь при объявлении функции для каждой переменной можно указывать свой тип, а также тип данных, который вернет функция. Доступные типы: int , float , string и bool ;
  • комбинированный оператор сравнения и многое другое.

В PHP 7 были удалены некоторые расширения:

  • mysql

Уже в PHP 5.6.x использование этих расширений было нежелательным. Вместо «mysql» следует использовать «PDO», а вместо ereg → preg .

Более детально ознакомиться с новинками PHP 7 можно на официальной странице

Стоит ли переходить на PHP 7?

На данный момент самое простое, что вы можете сделать для увеличения производительности сайта, это перейти на PHP 7.0.x. Прирост скорости также зависит от того, как написан ваш проект. Если вы еще сомневаетесь, покажем некоторые сравнения:

Бенчмарки PHP 5.6 vs PHP 7 для нектоторых фреймфорков (Zend framework, Magento, Drupal, Mediawiki, WordPress, Laravel, SugarCRM и др):

По всем фреймворкам прирост производительности значительный. Давайте посмотрим, как обстоит дело с функциями и конструкциями ядра:

Бенчмарки PHP 5.6 vs PHP 7 для функций и конструкций ядра:

Если графики вас убедили, можно попробовать перенести свой сайт на новую версию PHP и ощутить прирост на реальном проекте.

Коллеги с Elasticweb рассказали, что перед запуском нового сервера с PHP 7 они запустили на нем крупный государственный проект, работающий на Laravel 5. Это был своеобразный тест производительности новой версии PHP и сервера в целом. Ранее этот проект был на сервере с PHP 5.6. После переноса сайта страницы начали открываться значительно быстрее, при этом использование ресурсов сократилось вдвое.

Для подготовки переезда на PHP 7 они использовали PHP 7 Migration Assistant Report (MAR) . Большинство популярных CMS/Framework уже обладают совместимостью с PHP 7, поэтому основная задача сводилась к тестированию custom плагинов.

WordPress 4, Drupal 8/7 и последняя версия Joomla уже готовы к PHP 7!

Здравствуйте!

3 декабря был релиз PHP 7. Мы перевели для вас описание новинок со страницы документации http://php.net/manual/en/migration70.new-features.php . Это первая часть.

Объявление скалярных типов

Теперь используются два режима преобразования типов: неявное преобразование (coercive) и явное (strict).

Для параметров доступны типы:

  • строки (string),
  • целые числа (int),
  • числа с плавающей запятой (float),
  • булевы переменные (bool).

Это дополняет набор типов данных в PHP 5: имена классов, интерфейсы, массивы (array) и callable .

Результат:

Для включения режима строгой типизации используйте директиву declare в начале файла:

Declare(strict_types=1)

Режим типизации применяется к конкретному файлу. Включение строгой типизации влияет на вывод скалярных значений, возвращаемых значений, встроенных функции PHP и функций расширений.

Определение типов возвращаемых значений

В PHP 7 появилась возможность объявлять тип возвращаемого значения. Это напрямую коррелирует с новым режимом типизации: при строгой типизации возвращаемые значения должны строго соответствовать заданному типу, иначе будет выброшено исключение TypeError .

Набор типов возвращаемых значений такой же, как для аргументов.

Результат:

Array ( => 6 => 15 => 24)

Оператор объединения со значением NULL

Оператор объединения со значением NULL (??) введен для улучшения читаемости кода в случае, когда обычно используется тернарный оператор и isset() . Оператор возвращает первый операнд, если аргумент определен и не равен NULL и второй операнд в любых других случаях.

Оператор «космический корабль»

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

1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 //С плавающей точкой (float) echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 //Строки echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>

Определение константных массивов define()

Константные массивы могут быть объявлены с помощью define() . В PHP 5.6 они могли быть определены только с помощью директивы const.

Анонимные классы

Поддержка объявления анонимных классов с помощью new class . Это можно использовать для объявления одноразовых объектов без написания целого класса.

logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application; $app->setLogger(new class implements Logger { public function log(string $msg) { echo $msg; } }); var_dump($app->getLogger()); ?>

Результат:

Object(class@anonymous)#2 (0) {}

Escape-последовательности юникод-символов

Юникод-символы задаются шестнадцатеричным кодом в строке с двойными кавычками или herdoc-определении. Допускается добавление одной или нескольких цифр «0» перед кодом символа.

Echo "\u{aa}"; echo "\u{0000aa}"; echo "\u{9999}";

Результат:

ª ª //same as before but with optional leading 0"s 香

Closure::call()

Метод Closure::call() — более производительный способ временной привязки контекста объекта к замыканию и его вызова.

x;}; $getX = $getXCB->bindTo(new A, "A"); // промежуточное закрытие echo $getX(); //Код PHP 7+ $getX = function() {return $this->x;}; echo $getX->call(new A);

Результат:

Остальные нововведения — во второй части. Stay tuned.

Переходить на php 7.0 или подождать? Вот и мы так долго думали, взвешивали, прикидывали. Однако вчера настал тот момент, когда нужно было быстро принять решение

Случилось то, чего не желает себе ни один веб-мастер, ни один сисадмин хайлоада. Портал стал тормозить от нагрузки. Приходящие посетители оплатившие доступ к закрытым материалам и просто посетители, идущая одновременно рассылка 100К+ подписчикам портала, хелпдеск не имеющий возможности адекватно работать с админкой и оказывать помощь людям

В результате вечером был совершен переход с php 5.6 на php 7.0

Краткие характеристики сервера

  • ОС: FreeBSD
  • RAM: 5Гб
  • CPU: Xeon E5335 2.00GHz * 4 (ядра)

Поскольку это FreeBSD и держать одновременно более одной версии php не представляется возможным (на самом деле можно, но с этим придется попариться), даунтайм был всего 40 минут, которые потребовались на снос php 5.6 и установку php 7.0

Кстати у нас есть еще сервер на Gentoo, которая предоставляет возможность . На данный момент там php 5.6, 7.0, 7.1. Но это к слову

И вот, что у нас получилось. Посмотрим на дневные графики, где в левой части день вчерашний, а справа день сегодняшний

Что не изменилось

Что изменилось

С какими мы столкнулись трудностями

  • В текущем php 7.0 нет модуля memcache. Пришлось скачивать сторонний порт
  • Нет модуля mysql. К этому нужно быть готовым и заранее предусмотреть в плане перехода переход на mysqli. Более-менее современные фреймворки поддерживают mysqli
  • Если используете pecl-pdflib, будте готовы к тому, что работать он не будет. Мы используем wkhtmltopdf
  • Часть портала использовала mpdf. Он не работает с php 7.0. Установили свежий при помощи composer
  • Провели легкий рефакторинг кода

Вывод

При том же количестве посетителей портала нагрузка на сервер упала в два раза

Александр Черных

системный администратор

По некоторым исследованиям, на нем написано около 80% всех сайтов. И это совсем не странно, ведь даже такие сетевые гиганты как ВКонтакте и Фейсбук , были созданы с помощью него. О популярности можно судить еще и потому, что запрос “” – запрашивают в поисковых системах гораздо чаще, чем другие языки. Так на один запрос хостинг perl припадает 150 – вышеупомянутого хостинг php.

Язык создан в 1994 году и изначально представлял собой набор скриптов. Со временем скрипты были переделаны в интерпретатор на С.

Главные особенности и возможности языка PHP:

  • возможность работы с различными веб-серверами (, IIS );
  • легкость в изучении и гибкость в работе;
  • поддержка работы с базами данных – , MSSQL, Oracle, Postgre, MongoDB и другими;
  • для популярных ОС существуют соответствующие пакеты PHP, тоесть можно создавать сайты на ;
  • совместимость с большинством услуг хостинга , которые предоставляются провайдерами. Вы без проблем сможете разместить сайт написанный на PHP на любом хостинге. Как обезопасить PHP на сервере? Наши советы .
  • язык PHP не стоит на месте и постоянно развивается, что привлекает к себе разработчиков со всего мира.

Какие версии PHP актуальны на данный момент?

По праву, считаются актуальными версии PHP 4 и 5. Версия 4 имеет свою популярность и используется для написания различных веб-приложений. PHP 5 имеет множество дополнительных возможностей, но в свою очередь, не полностью совместим с четвертой версией языка. Поэтому некоторые программы (написаны на PHP 4) не смогут работать в среде PHP 5 . Как дополнительные инструменты к ядру языка часто используются модули. К примеру, разработаны специальные модули для работы с графикой, или модули, которые реализуют взаимодействия с различными базами данных.

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

PHP 7 – новая версия с новыми возможностями.

Не так давно, 3 декабря 2015 года , вышел новый релиз популярного языка программирования – PHP 7.0.0 , что дало старт развития серии PHP 7. Язык уже успел завоевать своих поклонников за двадцатилетнюю историю существования. Скриптовый язык общего назначения используют для создания различных веб-приложений, в том числе для написания платных и бесплатных CMS. Например, Joomla!, Drupal, WordPress и тп.

Дальше поговорим о новых возможностях PHP 7 и разберемся, почему его так ждали разработчики. Ведь несмотря на частую критику данного языка, большинство хостинг-провайдеров поддерживают именно его, в том числе устанавливают самые последние версии PHP. Язык является самым востребованным по критериям использования в сети. Новая версия является по своей сути экспериментальной и базируется на основе phpng (следующее поколение PHP), в основу положен принцип увеличения производительности за счет уменьшения потребления памяти.

Язык PHP 7 разработан с добавлением новой версии Zend Engine . Если сравнивать его с предыдущей версией 5.6 (новый релиз которой появился в ноябре этого же года), то веб-разработчики языка в первую очередь отмечают улучшенную производительность новой технологии: PHP 7 в два раза шустрее предшественника .

Рассмотрим по пунктам, что же предлагает новая версия PHP :

  • полноценная поддержка 64-битности системы;
  • использования памяти намного уменьшено;
  • добавлен функционал абстрактного синтаксического дерева ;
  • большинство фатальных ошибок превращаются в исключения;
  • усовершенствованна иерархия исключений;
  • генератор случайных чисел стал более безопасным;
  • анонимные классы;
  • убраны устаревшие SAPIs и расширения (sapi/aolserver, sapi/apache sapi/apache_hooks, sapi/apache2filter, sapi/caudium, sapi/continuity, sapi/isapi, sapi/milter, sapi/nsapi, sapi/phttpd, sapi/pi3web, sapi/roxen , sapi/thttpd, sapi/tux, sapi/webjames, ext/mssql и ext/sybase_ct);
  • остановка поддержки конструкторов в стиле PHP 4, в которых имя конструктора совпадает с именем класса;
  • создан метод Closure::call() ;
  • в добавок openssl есть поддержка TLS-расширения ALPN (Application-Layer Protocol Negotiation) для согласования протоколов уровня приложений, которые используются для обеспечения защищённого соединения. Применяется в SPDY и HTTP/2;
  • оператор объединения с NULL ?? ;
  • обеспечение группировки определений в операторе use (к примеру, use DoctrineCommonCollectionsExpr{ Comparison, Value, CompositeExpression };) и многое другое.

Скачать и более детально ознакомиться со всеми преимуществами новой версии PHP можно на официальной странице , так же там можно скачать руководство по миграции. Новый релиз – не просто очередная версия языка PHP , а начало развития нового пути в языках программирования. Для ее запуска понадобилось два года усердных разработок, который и помогли создать усовершенствованный продукт.

Если Вы ищете надежный 7-ой версии, обращайтесь к нам в компанию Hyper Host наши серверы виртуального хостинга поддерживают PHP 7. Надеемся, новые возможности придутся вам по вкусу. Мы, в свою очередь, будем рады помочь!

7435 раз(а) 1 Сегодня просмотрено раз(а)

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

Релиз 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 имеет возможность обрабатывать больше трафика , используя все те же ресурсы сервера.

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

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

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

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 , что, несомненно, положительно отразится как на скорости работы, так и на восприятии кода:
  • Новые операторы 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-битных сборках.
  • Делегирование генераторов - при помощи сложный генератор можно разделить на несколько более мелких. Как и некоторые другие нововведения, данное новшество направлено на написание более чистого и удобного для повторного использования кода.
  • Появление нового класса 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.