Enterprise приложения
на PHP
Павел Крынецкий, Аркадия
Немного о себе
Павел Крынецкий
Старший разработчик, ЗАО «Аркадия»
Разработка серверных приложений PHP, Java
pavel.krinetsky@arcadia.spb.ru
Общие сведения
PHP: Hypertext Preprocessor
Скриптовый язык общего назначения
Типизация: слабая динамическая
Мультипарадигменный
Кросплатформенный
Интерпретируемый
С открытым исходным кодом
Испытал влияние Perl, C, C++, Java, Tcl
Популярность
Тогда
PHP/FI 2.0 1995 г. – 1% доменов, или 50 тыс.
Сейчас
Используется сотнями тысяч разработчиков
Находится на 6 месте среди языков программирования
Написаны на PHP
Facebook, Wikipedia, Vkontakte, Habrahabr
Хронология
PHP 1.0 1994
Обработка шаблонов документов на Perl
Обработка форм, выполнение запросов в БД, передача данных
PHP/FI 2.0 1995
PHP, но не такой каким мы его знаем сегодня
Переписан на C
PHP 3.0 1998
Первое появление объектов
Расширение ядра дополнительными модулями
PHP 4.0 2000
Объектно-ориентированное программирование развивается
Новый движок Zend Engine, улучшена производительность, сессии,
буферизация, безопасность
PHP 5 2004
Объекты – в самом сердце языка
Zend Engine 2, производительность, XML, ООП. Пространства имён,
замыкания, ...
PHP 7
• Улучшение производительности, повышение эффективности использования
ОЗУ
• Типы возвращаемого значения (Return Types)
• Удаление артефактов
• Изменения Extension API
3 декабря 2015
Создатели/разработчики
Расмус Лердорф
датский программист, написавший в 1994 году набор скриптов на Perl/CGI, обрабатывающих
шаблоны HTML-документов
Энди Гутманс
израильский программист, PHP
разработчик и соучредитель Zend
Technologies. В настоящее время является
генеральным директором Zend Technologies.
Зеев Сураски
израильский программист, PHP
разработчик и соучредитель Zend
Technologies. Технический директор в
Zend Technologies.
компания-разработчик ядра языка
PHP
Название Zend было придумано как словослияние
их имен, Зеев и Энди.
Рейтинг языков программирования
Java, 24.40%
Python, 11.30%
PHP, 10.90%
C#, 9.10%
C++, 7.70%
C, 7.50%
Javascript, 7.10%
Objective-C, 5.20%
Swift, 2.90%
R, 2.80%
Matlab, 2.70%
Ruby, 2.40%
Visual Basic, 1.90%
VBA, 1.50%
Perl, 1.20%
Scala, 0.90%
lua, 0.50%
Java
Python
PHP
C#
C++
C
Javascript
Objective-C
Swift
R
Matlab
Ruby
Visual Basic
VBA
Perl
Scala
lua
0.00% 5.00% 10.00% 15.00% 20.00% 25.00% 30.00%
PHP IDE
PHPStorm
коммерческая кросс-платформенная интегрированная среда разработки для PHP. Разрабатывается компанией JetBrains на
основе платформы IntelliJ IDEA.
US 199$ / 89 $
Eclipse
свободная интегрированная среда разработки модульных кроссплатформенных приложений.
ZendStudio
проприетарная интегрированная среда разработки приложений (IDE) на языке программирования PHP,
разработанная Zend Technologies.
US 189$ / 89 $
NetBeans
свободная интегрированная среда разработки приложений (IDE) на языках программирования Java, Python, PHP, JavaScript,
C, C++, Ада и ряда других.
PHP Frameworks
1. Agavi
2. Banshee
3. CakePHP
4. CodeIgniter
5. Fat-Free
6. FuelPHP
7. Hazaar MVC
8. Kajona
9. Laravel
10. Lithium
11. Nette Framework
12. Phalcon
13. PHPixie
14. PRADO
15. Silex
16. SilverStripe
17. Symfony
18. TYPO3 Flow
19. Yii 2
20. Zend Framework
Reflection API
PHP 5 включает в себя полноценный Reflection API, который
предоставляет возможность проводить реверс-инжиниринг классов,
интерфейсов, функций, методов и модулей. Кроме того, Reflection API
позволяет получать doc-блоки комментариев функций, классов и
методов.
Некоторые классы интерфейса Reflection API
Класс Описание
Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе
ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним
ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними
ReflectionParameter Позволяет получить информацию об аргументах метода
ReflectionProperty Позволяет получить информацию о свойствах класса
ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними
ReflectionExtension Позволяет получить информацию о расширениях PHP
ReflectionException Предназначен для обработки ошибок
Управление зависимостями, Composer
Composer — это пакетный менеджер уровня приложений для языка
программирования PHP, который предоставляет средства по управлению
зависимостями в PHP-приложении.
Идея создания пакетных менеджеров уровня приложений не нова и его
авторы вдохновлялись уже существовавшим на тот момент времени npm
для Node.js.
composer.json
Зависимости проекта и другие
метаданные
composer.lock
Содержит конкретные версии пакетов
Использование
$ php composer install
$ php composer require monolog/monolog
$ php composer require monolog/monolog 1.0.*
$ php composer remove monolog/monolog
Что ещё полезного
Autoloading
Post-install scripts
Symfony Framework
Свободный фреймворк, написанный на PHP5, который использует паттерн Model-View-Controller
Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко
решать рутинные задачи веб-программиста.
Symfony Framework :: Модули
Asset
Управляет генерацией URL и версионизацией веб-ассетов, таких как CSS файлы, JavaScript, картинки.
BrowserKit
Эмулирует поведение браузера.
ClassLoader
Подгружает классы Вашего проекта автоматически при условии соблюдения некоторых PHP соглашений.
Config
Помогает находить, загружать, комбинировать, валидировать конфигурационные параметры.
Console
Облегчает создание красивых и тестируемых интерфейсов коммандной строки.
Symfony Framework :: Модули (2)
CssSelector
Преобразует CSS селекторы в выражения XPath.
Debug
Предоставляет инструменты для облегчения отладки PHP кода.
DependencyInjection
Позволяет стандартизировать и централизовывать конструирование объектов в Вашем
приложении.
DomCrawler
Упрощает навигацию по DOM для HTML и XML документов.
EventDispatcher
Реализует паттерн Медиатор просто и эффективно, что позволяет сделать проект легко
расширяемым.
Symfony Framework :: Модули (3)
ExpressionLanguage
Предоставляет движок компиляции и вычисления значений выражения.
Filesystem
Предоставляет основные утилиты для взаимодействия с файловой системой.
Finder
Позволяет осуществлять поиск по файлам и директориям через интуитивно понятный интерфейс.
Form
Предоставляет инструменты для простого создания и повторного использования HTML-форм.
Guard
Совмещает множество уровней аутентификации в единое целое, значительно облегчая создание
сложных систем аутентификации, где у Вас есть полный контроль над процессом.
Symfony Framework :: Модули (4)
HttpFoundation
Привносит объектно-ориентированный уровень для HTTP-спецификации.
HttpKernel
Предоставляет элементы построения гибких и высокопроизводительных фреймворков, основанных на
HTTP.
Icu
Содержит данные библиотеки ICU. Компонент устарел. Используйте Intl вместо него.
Intl
Предоставляет «аварийный» вариант использования Intl для случаев, когда intl-выражения недоступны в
среде выполнения.
Ldap
LDAP-клиент для PHP поверх стандартного ldap-расширения.
Symfony Framework :: Модули (5)
Locale
Аварийный вариант на случай недоступности intl-выражений на целевой платформе. Устарел.
Вместо него нужно использовать компонент Intl.
OptionsResolver
Позволяет конфигурировать объекты массивами опций.
Process
Выполняет команды в подпроцессах.
PropertyAccess
Предоставляет функции чтения/записи из/в объекты или массивы используя простой строковый
синтаксис.
PropertyInfo
Извлекает информацию о свойствах PHP-классов используя популярные механизмы получения
метаданных
(Doctrine, PHP Reflection, PHPdoc, и т.д.)
Symfony Framework :: Модули (6)
Routing
Отображает HTTP-запросы на набор конфигурационных параметров.
Security
Предоставляет инфраструктуру для изощрённых систем авторизации.
Serializer
Преобразует объекты в определённый формат (XML, JSON, YAML, …) и обратно.
Stopwatch
Прозволяет выполнять профилирование кода.
Templating
Набор средств, полезных при построении различного рода систем шаблонизации.
Symfony Framework :: Модули (7)
Translation
Набор средств для интернационализации приложения.
Validator
Набор инструментов для валидации классов.
VarDumper
Механизм обхода любой произвольной PHP-переменной.
Yaml
Загружает и формирует YAML-файлы.
ORM: Doctrine
• Объектно-реляционный проектор для PHP >= 5.3.0
• Базируется на DBAL – слой абстракции от СУБД, поддерживает MySQL, PgSQL, Oracle, Sqlite
• Собственный объектный дилект DQL (похож на HQL)
• ООП конструктор запросов
• Основывается на идеях Hibernate
• Генерация DDL из маппинга, обновление существующей структуры БД
• Генерация маппинга и объектных сущностей из DDL
• Валидация данных
• Каскадные операции с сущностями
• Поддержка аннотаций
Runtime
PHP-CGI
Классический CGI
PHP-FPM
С версии 5.3.3, для высоконагруженных сред, предоставляет некоторые дополнительные возможности
Apache Module
Подключаемый модуль
CLI
С версии 4.3.0, для приложений с интерфейсом командной строки
Ложка дёгтя
• Несогласованный синтаксис функций и неортогональность
• Отсутствие обратной совместимости между версиями языка
• Отсутствие поддержки многобайтовых кодировок в ядре языка
• Отсутствие поддержки многопоточности
Пример реального приложения :: Назначение
• CRM, электронный документооборот, хранение и обработка «тяжёлых» медиаданных
• Доступ по Web с ПК и мобильного телефона
• Гибкая система разграничения прав доступа
• Специальные обработчики контента дла определённых типов данных – транкодирование/потоковое вещание
видео/аудио с подстройкой под ширину канала, аудиовизуальное «аннотирование» видео и PDF, «водные знаки» для
видео, графики и документов
• Текстовые коммуникации между пользователями в приложении
• Email оповещения
• Система статусов и меток для хранимых документов, возможность организации в группы, установка метаданных
• Быстры полнотекстовый поиск, поиск по неограниченному числу параметров, поиск по специфичным параметрам,
динамическое добавление критериев поиска
• API для интеграции с внешними системами
• Подсистема логирования, система иформеров, анализирующая логи и визулизирущая определённую информацию в
максимально наглядном для пользователя виде.
Пример реального приложения :: Производительность
До 15 тыс. сотрудников, работающих в приложении одновременно
Пример реального приложения :: Архитектура
Web Client
HTML / AngularJS /
Bootstrap
Core
PHP
Обработка клиентских
запросов
Meta
Silex, Doctrine
Бизнес-логика, доступ к
данным, REST API
CDS
Медиа ресурсы,
Redis, ФС Queues
Фоновые задачи, RabbitMQ,
ZMQ
Worker
Worker
Worker
Пример реального приложения :: Среда
выполнения
Client Core
Meta
CDS
Queues
Load balancer Load balancer
Apache
HTTPD
Nginx
MySQL
SMTP
ZMQ
ElasticsearchoAuth
Web
Sockets PHP FPMRedis
Supervisor
ffmpegNFS
Q & A

2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий

  • 1.
    Enterprise приложения на PHP ПавелКрынецкий, Аркадия
  • 2.
    Немного о себе ПавелКрынецкий Старший разработчик, ЗАО «Аркадия» Разработка серверных приложений PHP, Java pavel.krinetsky@arcadia.spb.ru
  • 3.
    Общие сведения PHP: HypertextPreprocessor Скриптовый язык общего назначения Типизация: слабая динамическая Мультипарадигменный Кросплатформенный Интерпретируемый С открытым исходным кодом Испытал влияние Perl, C, C++, Java, Tcl
  • 4.
    Популярность Тогда PHP/FI 2.0 1995г. – 1% доменов, или 50 тыс. Сейчас Используется сотнями тысяч разработчиков Находится на 6 месте среди языков программирования Написаны на PHP Facebook, Wikipedia, Vkontakte, Habrahabr
  • 5.
    Хронология PHP 1.0 1994 Обработкашаблонов документов на Perl Обработка форм, выполнение запросов в БД, передача данных PHP/FI 2.0 1995 PHP, но не такой каким мы его знаем сегодня Переписан на C PHP 3.0 1998 Первое появление объектов Расширение ядра дополнительными модулями PHP 4.0 2000 Объектно-ориентированное программирование развивается Новый движок Zend Engine, улучшена производительность, сессии, буферизация, безопасность PHP 5 2004 Объекты – в самом сердце языка Zend Engine 2, производительность, XML, ООП. Пространства имён, замыкания, ...
  • 6.
    PHP 7 • Улучшениепроизводительности, повышение эффективности использования ОЗУ • Типы возвращаемого значения (Return Types) • Удаление артефактов • Изменения Extension API 3 декабря 2015
  • 7.
    Создатели/разработчики Расмус Лердорф датский программист,написавший в 1994 году набор скриптов на Perl/CGI, обрабатывающих шаблоны HTML-документов Энди Гутманс израильский программист, PHP разработчик и соучредитель Zend Technologies. В настоящее время является генеральным директором Zend Technologies. Зеев Сураски израильский программист, PHP разработчик и соучредитель Zend Technologies. Технический директор в Zend Technologies. компания-разработчик ядра языка PHP Название Zend было придумано как словослияние их имен, Зеев и Энди.
  • 8.
    Рейтинг языков программирования Java,24.40% Python, 11.30% PHP, 10.90% C#, 9.10% C++, 7.70% C, 7.50% Javascript, 7.10% Objective-C, 5.20% Swift, 2.90% R, 2.80% Matlab, 2.70% Ruby, 2.40% Visual Basic, 1.90% VBA, 1.50% Perl, 1.20% Scala, 0.90% lua, 0.50% Java Python PHP C# C++ C Javascript Objective-C Swift R Matlab Ruby Visual Basic VBA Perl Scala lua 0.00% 5.00% 10.00% 15.00% 20.00% 25.00% 30.00%
  • 9.
    PHP IDE PHPStorm коммерческая кросс-платформеннаяинтегрированная среда разработки для PHP. Разрабатывается компанией JetBrains на основе платформы IntelliJ IDEA. US 199$ / 89 $ Eclipse свободная интегрированная среда разработки модульных кроссплатформенных приложений. ZendStudio проприетарная интегрированная среда разработки приложений (IDE) на языке программирования PHP, разработанная Zend Technologies. US 189$ / 89 $ NetBeans свободная интегрированная среда разработки приложений (IDE) на языках программирования Java, Python, PHP, JavaScript, C, C++, Ада и ряда других.
  • 10.
    PHP Frameworks 1. Agavi 2.Banshee 3. CakePHP 4. CodeIgniter 5. Fat-Free 6. FuelPHP 7. Hazaar MVC 8. Kajona 9. Laravel 10. Lithium 11. Nette Framework 12. Phalcon 13. PHPixie 14. PRADO 15. Silex 16. SilverStripe 17. Symfony 18. TYPO3 Flow 19. Yii 2 20. Zend Framework
  • 11.
    Reflection API PHP 5включает в себя полноценный Reflection API, который предоставляет возможность проводить реверс-инжиниринг классов, интерфейсов, функций, методов и модулей. Кроме того, Reflection API позволяет получать doc-блоки комментариев функций, классов и методов. Некоторые классы интерфейса Reflection API Класс Описание Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними ReflectionParameter Позволяет получить информацию об аргументах метода ReflectionProperty Позволяет получить информацию о свойствах класса ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними ReflectionExtension Позволяет получить информацию о расширениях PHP ReflectionException Предназначен для обработки ошибок
  • 12.
    Управление зависимостями, Composer Composer— это пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении. Идея создания пакетных менеджеров уровня приложений не нова и его авторы вдохновлялись уже существовавшим на тот момент времени npm для Node.js. composer.json Зависимости проекта и другие метаданные composer.lock Содержит конкретные версии пакетов Использование $ php composer install $ php composer require monolog/monolog $ php composer require monolog/monolog 1.0.* $ php composer remove monolog/monolog Что ещё полезного Autoloading Post-install scripts
  • 13.
    Symfony Framework Свободный фреймворк,написанный на PHP5, который использует паттерн Model-View-Controller Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста.
  • 14.
    Symfony Framework ::Модули Asset Управляет генерацией URL и версионизацией веб-ассетов, таких как CSS файлы, JavaScript, картинки. BrowserKit Эмулирует поведение браузера. ClassLoader Подгружает классы Вашего проекта автоматически при условии соблюдения некоторых PHP соглашений. Config Помогает находить, загружать, комбинировать, валидировать конфигурационные параметры. Console Облегчает создание красивых и тестируемых интерфейсов коммандной строки.
  • 15.
    Symfony Framework ::Модули (2) CssSelector Преобразует CSS селекторы в выражения XPath. Debug Предоставляет инструменты для облегчения отладки PHP кода. DependencyInjection Позволяет стандартизировать и централизовывать конструирование объектов в Вашем приложении. DomCrawler Упрощает навигацию по DOM для HTML и XML документов. EventDispatcher Реализует паттерн Медиатор просто и эффективно, что позволяет сделать проект легко расширяемым.
  • 16.
    Symfony Framework ::Модули (3) ExpressionLanguage Предоставляет движок компиляции и вычисления значений выражения. Filesystem Предоставляет основные утилиты для взаимодействия с файловой системой. Finder Позволяет осуществлять поиск по файлам и директориям через интуитивно понятный интерфейс. Form Предоставляет инструменты для простого создания и повторного использования HTML-форм. Guard Совмещает множество уровней аутентификации в единое целое, значительно облегчая создание сложных систем аутентификации, где у Вас есть полный контроль над процессом.
  • 17.
    Symfony Framework ::Модули (4) HttpFoundation Привносит объектно-ориентированный уровень для HTTP-спецификации. HttpKernel Предоставляет элементы построения гибких и высокопроизводительных фреймворков, основанных на HTTP. Icu Содержит данные библиотеки ICU. Компонент устарел. Используйте Intl вместо него. Intl Предоставляет «аварийный» вариант использования Intl для случаев, когда intl-выражения недоступны в среде выполнения. Ldap LDAP-клиент для PHP поверх стандартного ldap-расширения.
  • 18.
    Symfony Framework ::Модули (5) Locale Аварийный вариант на случай недоступности intl-выражений на целевой платформе. Устарел. Вместо него нужно использовать компонент Intl. OptionsResolver Позволяет конфигурировать объекты массивами опций. Process Выполняет команды в подпроцессах. PropertyAccess Предоставляет функции чтения/записи из/в объекты или массивы используя простой строковый синтаксис. PropertyInfo Извлекает информацию о свойствах PHP-классов используя популярные механизмы получения метаданных (Doctrine, PHP Reflection, PHPdoc, и т.д.)
  • 19.
    Symfony Framework ::Модули (6) Routing Отображает HTTP-запросы на набор конфигурационных параметров. Security Предоставляет инфраструктуру для изощрённых систем авторизации. Serializer Преобразует объекты в определённый формат (XML, JSON, YAML, …) и обратно. Stopwatch Прозволяет выполнять профилирование кода. Templating Набор средств, полезных при построении различного рода систем шаблонизации.
  • 20.
    Symfony Framework ::Модули (7) Translation Набор средств для интернационализации приложения. Validator Набор инструментов для валидации классов. VarDumper Механизм обхода любой произвольной PHP-переменной. Yaml Загружает и формирует YAML-файлы.
  • 21.
    ORM: Doctrine • Объектно-реляционныйпроектор для PHP >= 5.3.0 • Базируется на DBAL – слой абстракции от СУБД, поддерживает MySQL, PgSQL, Oracle, Sqlite • Собственный объектный дилект DQL (похож на HQL) • ООП конструктор запросов • Основывается на идеях Hibernate • Генерация DDL из маппинга, обновление существующей структуры БД • Генерация маппинга и объектных сущностей из DDL • Валидация данных • Каскадные операции с сущностями • Поддержка аннотаций
  • 22.
    Runtime PHP-CGI Классический CGI PHP-FPM С версии5.3.3, для высоконагруженных сред, предоставляет некоторые дополнительные возможности Apache Module Подключаемый модуль CLI С версии 4.3.0, для приложений с интерфейсом командной строки
  • 23.
    Ложка дёгтя • Несогласованныйсинтаксис функций и неортогональность • Отсутствие обратной совместимости между версиями языка • Отсутствие поддержки многобайтовых кодировок в ядре языка • Отсутствие поддержки многопоточности
  • 24.
    Пример реального приложения:: Назначение • CRM, электронный документооборот, хранение и обработка «тяжёлых» медиаданных • Доступ по Web с ПК и мобильного телефона • Гибкая система разграничения прав доступа • Специальные обработчики контента дла определённых типов данных – транкодирование/потоковое вещание видео/аудио с подстройкой под ширину канала, аудиовизуальное «аннотирование» видео и PDF, «водные знаки» для видео, графики и документов • Текстовые коммуникации между пользователями в приложении • Email оповещения • Система статусов и меток для хранимых документов, возможность организации в группы, установка метаданных • Быстры полнотекстовый поиск, поиск по неограниченному числу параметров, поиск по специфичным параметрам, динамическое добавление критериев поиска • API для интеграции с внешними системами • Подсистема логирования, система иформеров, анализирующая логи и визулизирущая определённую информацию в максимально наглядном для пользователя виде.
  • 25.
    Пример реального приложения:: Производительность До 15 тыс. сотрудников, работающих в приложении одновременно
  • 26.
    Пример реального приложения:: Архитектура Web Client HTML / AngularJS / Bootstrap Core PHP Обработка клиентских запросов Meta Silex, Doctrine Бизнес-логика, доступ к данным, REST API CDS Медиа ресурсы, Redis, ФС Queues Фоновые задачи, RabbitMQ, ZMQ Worker Worker Worker
  • 27.
    Пример реального приложения:: Среда выполнения Client Core Meta CDS Queues Load balancer Load balancer Apache HTTPD Nginx MySQL SMTP ZMQ ElasticsearchoAuth Web Sockets PHP FPMRedis Supervisor ffmpegNFS
  • 28.