admin / 07.12.2017

Подборка материалов по PHP 7 | Библиотека программиста

Аннотация

Новую версию PHP 7 сообщество разработчиков ожидало более 10 лет. Предыдущие издание книги вышло более 8 лет назад. За это время язык и среда разработки изменились кардинально. PHP обогатился трейтами, пространством имен, анонимными функциями, замыканиями, элементами строгой типизации, генераторами, встроенным Web-сервером и многими другими возможностями. Версия PHP 7 дополняет язык новыми операторами, переработанным механизмом обработки ошибок, анонимными классами, рассширенной поддержкой генераторов, кодировки UTF-8 и множеством более мелких изменений. Все возможности языка детально освещаются в книге. В третьем издании добавлены 24 новые главы, остальные главы обновлены или переработаны.

За прошедшее время изменился и подход в Web-разработке. Революция, совершенная системой контроля версий Git и бесплатными Git-хостингами вроде GitHub, привела к совершенно новой системе распространения программных библиотек и их разработки. Современное Web-приложение собирается из независимых компонентов, управление которыми осуществляется менеджером Composer. Совместимость компонентов из разных фреймворков обеспечивают стандарты PSR, а рабочую среду — виртуальные машины. На страницах книги детально освещаются инструменты и приемы работы современного PHP-сообщества.

✔ Нововведения PHP 7
✔ Объектно-ориентированное программирование
✔ Компоненты PHP и Composer
✔ Cтандарты PSR
✔ PHP-FPM и nginx
✔ Исходные коды на GitHub

Исходные коды всех листингов можно скачать по ссылкам https://github.com/igorsimdyanov/php7,ftp:// ftp.bhv.ru /97859775 37254.zip, а также со страницы книги на сайте www.bhv.ru.


Об авторах

Котеров Дмитрий Владимирович, системный программист, Web-разработчик с пятнадцатилетнем стажем работы в области Web-программирования, администрирования ОС Linux и Windows, ведущий разработчик хорошо известных в русскоязычном Интернете проектов Денвер (denwer.ru) и Orphus (orphus.ru). В повседневной практике использует языки PHP, JavaScript, Perl, C++, Java. Автор бестселлеров "Самоучитель PHP 4", "PHP 5" и более 50 статей, касающихся Web-программирования.

Симдянов Игорь Вячеславович, Web-разработчик, специалист с пятнадцатилетним стажем работы в области Web-программирования. Ведущий разработчик компании GoPromo, занимающейся разработкой сайтов газеты Известия, телеканала LifeNews, радиостанции Русская служба новостей. В повседневной практике использует языки PHP, Ruby, JavaScript, SQL. Автор двух десятков книг по Web-разработке.
 

Рекомендуем также

Оставить отзыв на книгу

Сила знаний одного экземпляра этой книги составляет 18.42 Н.

  • Автор: Михаил Русаков
  • Год издания: 2017
  • Язык: Русский
  • Жанр: Обучающий видеокурс
  • Формат: MP4

Отличный курс по основам PHP 7. Его изучение пролетает незаметно, потому что он создан многолетним практиком, у которого, несомненно, есть дар преподавания. Это не дар убеждения, этот автор точно знает, что знать надо обязательно, а что является вторичной информацией и только отвлекает от основного. Курс не содержит «водицы».

Для чего вам может понадобиться PHP 7, если вы ещё новичок? Опытные сайтостроители без сомнения назовут PHP самым востребованным языком в веб-программировании. Как только речь заходит о создании боле-менее серьёзного сайта, язык PHP «выходит на сцену».

Скачать PHP 7. Наиболее полное руководство.

Не бывает функциональных сайтов без PHP.

Этот курс содержит почти три десятка понятных уроков по основам PHP 7. Эта база позволит «расти» дальше вполне самостоятельно. По сути, вы получите новую профессию. Я эти уроки уже «прошел», и могу с полным основанием их вам рекомендовать. Качайте их и учите, они того стоят!

Скачать видео: Создание движка на PHP.

Верстка сайта на HTML и CSS

Перед вами уроки по верстке сайтов на HTML и CSS. Это незаменимое руководство для новичков, планирующих делать востребованные и современные сайты, как для себя, так и на заказ.

подробнее…

Курсы Евгения Попова

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

подробнее…

Заработок на создании сайтов под заказ

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

подробнее…

Верстка сайта на HTML5 и CSS3

Видеокурс по изучению технологий верстки адаптивных сайтов. Основанием всех современных сайтов являются «два кита»: новейшие версии веб-языков HTML5 и CSS3.

подробнее…

Создание сайта с нуля (PDF)

Процесс создания сайта с нуля — на понятном языке для абсолютных новичков. Четыре этапа сайтостроительства: разработка дизайна, верстка, добавление скриптов и размещение сайта в сети.

подробнее…

Основы JavaScript, jQuery и Ajax

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

подробнее…

Основы PHP 7

Понятный курс по основам PHP 7. В нём — базовые знания PHP без «воды». Это основы веб-программирования.

подробнее…

Видеокурс по основам PHP

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

подробнее…

Заинтересованному кругу лиц и друзьям:

PHP 7 Учебное пособие

РНР 7.2 выйдет в ближайшее время и на самом деле он уже достиг статуса релиз-кандидата. Недавно я исследовал Symfony Flex с Docker-ом, и подумал, что неплохо бы сделать небольшой тест-драйв для сравнения различий в PHP 7.1 и 7.2(RC4) относительно производительности по нескольким критериям.

Как и PHP 7.1, версия 7.2 не обещает каких-либо значительных улучшений производительности. Но она идет с некоторыми улучшениями, такими, как хэширование пароля Argon2 и набором обновлений для большинства современных PHP-проектов.

С помощью контейнеров, ставших нормой, переключение версий на хостинге стало простой операцией. Так что сравнить 7.1 и 7.2 не составит труда. Итак.

Тестируемое приложение — гибридное приложение портированное на Symfony Flex, которое я сделал еще в январе. Проект теперь имеет конфигурацию, необходимую для запуска его с Docker, а весь исходный код доступен на GitHub. Настройка Docker-а основана на примере для Symfony Flex Кевина Дунгласа (Kevin Dunglas), работать с которым одно удовольствие.

Тесты запускались на виртуальном выделенном сервере (VPS) с процессором a1 и 1 Гб оперативной памяти. Для установки PHP использовались официальные образы PHP-FPM для PHP 7.2 RC4 и PHP 7.1. В качестве базы данных используется SQLite, с контроллером API, который делает несколько простых кэширований чтобы удостовериться, что мы не тестируем БД.

Тесты запускались три раза, и брался средний результат. В дополнение к стандартной конфигурации PHP 7.2, я также протестировал с включенной оптимизацией Dead Code Elimination (DCE), которая будет развиваться в PHP 7.3.

Результаты и выводы

Используя контроллер первой страницы с Twig-рендеренгом обнаружились некоторые различия в PHP 7.1 и 7.2, которые выражаются в нескольких процентах разницы. DCE, похоже, еще больше повышает производительность, что делает разницу между PHP 7.1 и 7.2 значительной на более высоком количестве конкурентных запросов. Возможно в результате улучшений OPCache?

При вызове API-шного backend-контроллера без какого-либо Twig-рендеренга, различия между 7.1, 7.2 и 7.2-DCE довольно значительны. Похоже, оптимизации вступают в игру на 50 и 100 конкурентных запросах, где 7.1 начинает сдавать, а 7.2 остается постоянной.

Как обычно это происходит при изменении минорных версий, результаты тестов должны быть совсем мизерными, но, кажется, PHP 7.2 поставляется с ощутимым повышением скорости — по крайней мере с Symfony Flex (с компонентами из 3.3) при работе на большом количестве конкурентных запросов.

Конечно, тут нет такого рывка, как в PHP 5.7 и 7.0, но, как говорится, это было ожидаемо. Тем временем команда PHP продолжает работать над 7.3 с дальнейшими DCE-улучшениями и JIT-движком, над которым сейчас ведётся работа.

Стоит отметить, что существует утечка памяти в PHP 7.2 (RC4) при запуске бенчмарков, так что вы, возможно, захотите установить PHP-FPM настройку pm.max_requests на что-то другое, чем дефолтное значение 0, чтобы избежать свопинга при долго запущенных потоках. В частности, это происходит только при вызове отображаемой (с Twig-рендерингом) страницы, но не при вызове API.

phpperformanceпроизводительностьbenchmarks7.17.2

2017-10-29alek13Поделиться:оригинал

php7 изменения и производительность

30.05.2015

Дата выхода php-7.0 все ближе и ближе. Планируемые даты релизов выглядят следующим образом:

  • 15 марта 2015 — заморозка функционала
  • 11-15 июня 2015 — выход php-7.0-rc
  • 15 октября 2015 — выход php-7.0

Рассмотрим что будет из себя будет представлять новый релиз, и стоит ли переходить на php7 в будущем.

Изменения в ядре php7 (zend engine 3, phpng)

Как многие уже знают, самые значительные изменения были проведены в ядре php. Начиная с php-5.0, с каждым релизом, велись работы по улучшению производительности как самого ядра так и OPCache. И производительность действительно улучшалась как в синтетических тестах так и в реальных приложениях. Но к версии 5.5 стало ясно что «узкое место» в плане производительности — это система выделения и освобождения памяти (более подробно об этом можно почитать на php internals). Потому было принято решение переработать типизацию данных, для того чтобы найти оптимальный способ выделения памяти. В течении около пяти месяцев велась работа по рефакторингу и изменению ядра Zend Engine 2.x.

Результаты работы получили кодовое имя phpng, так же известном как «Zend Engine 3». Так как система типизации была изменена — почти все расширения (такие как mysql, ereg и другие) потребовали значительной переработки. Многие из них уже совместимы с phpng, но не все.

Следует учесть, что новое ядро в первую очередь было нацелено на улучшение производительности (и управлением памятью) у «реальных приложений» а не синтетических тестов. И судя по результатам тестов — производительность увеличилась значительно.

Из других преимуществ ядра можно отметить следующее:

  • полная поддержка 32bit/64bit платформ
  • новый tread-safe механизм
  • новый менеджер памяти
  • отличная кодовая база для таких вещей как JIT

Недостатки, или следствия изменений:

  • размер типов теперь зависит от целевой платформы

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

Изменения в расширениях

Все расширения были переработаны с учетом новой типизации, но изменения также коснулись и функций.

Итак, наиболее явные изменения:

  • Работа с регулярными выражениями (ereg):
    • удалены все функции ereg_* (вместо них необходимо использовать preg_*)
  • Работа с mysql (mysql):
    • удалены все функции mysql_* (необходимо использовать mysqli_* или PDO)
  • Множество удаленных функций в расширениях:
    • Date
    • Curl
    • Mcrypt
    • Openssl
    • json
    • dba
    • … список можно продолжить
  • Удалена поддержка следующих SAPI (считаются устаревшими):

Новые конструкции и изменения языка

В конструкции языка внесено множество изменений как уровня логики так и простых упрощений. Если говорить прямо, то компилятор php был полностью переписан и на данный момент использует AST для компиляции.

Наиболее очевидные изменения, того что «добавлено»:

  • возможность обработки исключения, вместо фатальной ошибки
  • новые операторы сравнения ( <=>, ?? и другие)
  • анонимные классы
  • указание типа возвращаемого значения (return type declaration)
  • группировка для оператора use
  • работа с замыканиями (closure)
  • скалярные типы аргументов функции (scalar type hints)
  • опционально доступный «строгий режим» работы с типами (stitict mode)
  • изменена трактовка переменных и выражений
  • улучшена работа с генераторами ( ключевое слово yield from и другие изменения )
  • конструктор класса в стиле php4 (когда имя класса совпадает с именем метод) теперь генерирует E_DEPRECATED и будет удален в php8
  • изменено поведение побитовых операторов <<, >>  и других
  • изменено поведение функций funct_get_args и funct_get_arg
  • функция языка unserialize принимает дополнительный аргумент
  • функция языка list изменила поведение
  • изменено поведение цикла foreach (например в работе с внутренним итератором)
  • новый синтаксис unicode последовательностей

То что будет «удалено» и более не поддерживается:

  • удалена поддержка скрипт. тега в стиле ASP (то есть <% )
  • удалены функции call_user_method и call_user_method_array
  • удалена переменная $HTTP_RAW_POST_DATA  (необходимо использовать потоки)

Рассмотрим некоторые нововведения подробней.

Новые операторы

Оператор use стал немного умней, теперь допускается конструкция с несколькими пространствами имен, к примеру:

Добавлен оператор сравнения с null  «??«. Он позволяет в некоторых случаях сделать код более читабельней, к примеру:

Добавлен оператор комбинированного сравнения «<=>» (T_SPACESHIP).

404 Not Found

Его суть заключается в следующем:

  • возвращает 0, если оба операнда равны
  • возвращает -1, если левый больше правого
  • возвращает 1, если правый больше левого

Исключения (exception) на замену фатальным ошибкам (fatal error)

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

  1. BaseException
    1. ParseException
    2. EngineException
      1. TypeException
    3. Exception
      1. ErrorException
      2. RuntimeException

Существует возможность обрабатывать такие случаи:

Указание типа возвращаемого значения (return type declaration)

Функции могут декларировать явно тип возвращаемого значения в прототипе (с помощью языковой конструкции). В случае если возвращаемое значение не соответствует заявленному во время выполнения — происходит FatalError.

Также можно отметить, что:

  1. такие типы как «resource» и «null» не поддерживаются
  2. в случае не совпадения типов — php пытается их привести, и только в случае неудачи происходит FatalError

Скалярные типы аргументов функции (scalar type hints)

Данная возможность позволяет указать в прототипе функции тип int, bool, string и другие. Тип null и resource  не поддерживаются.

Если во время выполнения подобной функции передается не соответствующая  типу переменная, компилятор пытается ее преобразовать, и в случае если это не возможно — происходит FatalError.

«строгий режим» работы с типами (stitict mode)

Интерпретатор позволяет регулировать «строгость» соответствия типов данных с помощью директивы declare(strict_types=1). Данная директива позволяет включать или выключать строгий режим типов.
Есть несколько особенностей ее использования:

  1. директива declare — обязана быть первым оператором в файле.
  2. при включении «строгого режима» ( в начале файла есть оператор declare(strict_types=1) ) — данный режим включается только у того файла где есть эта директива

Пример работы в обычном режиме:

Пример работы в «строгом режиме»:

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

Анонимные классы похожи на аналогичные в других языках и на существующие в php5 анонимные функции.

Изменения в интерпретации переменных

В новой версии интерпретация переменный стала следовать семантике left-to-right. Сравним некоторые случаи.

PHP5:

PHP7:

Изменения в некоторых языковых конструкциях

Изменено поведение list(), и именно:

  • добавлена возможность распаковки объектов с ArrayAccess
  • убрана возможность распаковки строки

Из приведения типов убрано привидение типов из строки «0xXXX» в число.

Убрана возможность повторной декларации переменных в прототипе функции:

Для именования классов, интерфейсов и примесей теперь нельзя использовать имена зарезервированных типов:

Изменено поведение побитовых операторов. Сдвиг int на количество битов большее разрядности int всегда будет возвращать 0.

Побитовый сдвиг на отрицательное число будет возвращать false и генерировать предупреждение.

Выводы

Проделанная разработчиками работа над php7 действительно огромная. Язык начинает приобретать новый, более изящный вид. Да, в этом релизе все еще существует оператор «goto» и наборы функций вроде «array_*», как и много других спорных моментов. Тем не менее, даже с учетом этого, прогресс есть :).

Как и другие major релизы, php7 ломает не мало зависимостей, но с другой стороны дает более совершенный инструмент для разработчика. По результатам тестов (синтетических и на реальных системах) мы получаем (имеются ввиду билд с HHVM):

  1. прирост производительности в 2 раза (примерно) 
  2. потребление памяти уменьшено на ~ 40% (почти в два раза)

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*