2015-12-12 | azovdevmeetup 2015 | enterprise приложения на php | Павел...
TRANSCRIPT
![Page 1: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/1.jpg)
Enterprise приложенияна PHP
Павел Крынецкий, Аркадия
![Page 2: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/2.jpg)
Немного о себе
Павел Крынецкий
Старший разработчик, ЗАО «Аркадия»
Разработка серверных приложений PHP, Java
![Page 3: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/3.jpg)
Общие сведения
PHP: Hypertext Preprocessor
Скриптовый язык общего назначения
Типизация: слабая динамическая
Мультипарадигменный
Кросплатформенный
Интерпретируемый
С открытым исходным кодом
Испытал влияние Perl, C, C++, Java, Tcl
![Page 4: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/4.jpg)
Популярность
Тогда
PHP/FI 2.0 1995 г. – 1% доменов, или 50 тыс.
Сейчас
Используется сотнями тысяч разработчиков
Находится на 6 месте среди языков программирования
Написаны на PHP
Facebook, Wikipedia, Vkontakte, Habrahabr
![Page 5: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/5.jpg)
Хронология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, ООП. Пространства имён, замыкания, ...
![Page 6: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/6.jpg)
PHP 7
• Улучшение производительности, повышение эффективности использования ОЗУ
• Типы возвращаемого значения (Return Types)
• Удаление артефактов
• Изменения Extension API
3 декабря 2015
![Page 7: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/7.jpg)
Создатели/разработчики
Расмус Лердорф
датский программист, написавший в 1994 году набор скриптов на Perl/CGI, обрабатывающих шаблоны HTML-документов
Энди Гутмансизраильский программист, PHPразработчик и соучредитель ZendTechnologies. В настоящее время являетсягенеральным директором Zend Technologies.
Зеев Сураскиизраильский программист, PHPразработчик и соучредитель ZendTechnologies. Технический директор вZend Technologies.
компания-разработчик ядра языка PHPНазвание Zend было придумано как словослияние их имен, Зеев и Энди.
![Page 8: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/8.jpg)
Рейтинг языков программирования
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%
![Page 9: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/9.jpg)
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++, Ада и ряда других.
![Page 10: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/10.jpg)
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
![Page 11: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/11.jpg)
Reflection API
PHP 5 включает в себя полноценный Reflection API, который предоставляет возможность проводить реверс-инжиниринг классов, интерфейсов, функций, методов и модулей. Кроме того, Reflection API позволяет получать doc-блоки комментариев функций, классов и методов.
Некоторые классы интерфейса Reflection API
Класс Описание
Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе
ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним
ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними
ReflectionParameter Позволяет получить информацию об аргументах метода
ReflectionProperty Позволяет получить информацию о свойствах класса
ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними
ReflectionExtension Позволяет получить информацию о расширениях PHP
ReflectionException Предназначен для обработки ошибок
![Page 12: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/12.jpg)
Управление зависимостями, 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
Что ещё полезногоAutoloadingPost-install scripts
![Page 13: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/13.jpg)
Symfony Framework
Свободный фреймворк, написанный на PHP5, который использует паттерн Model-View-Controller
Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста.
![Page 14: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/14.jpg)
Symfony Framework :: Модули
Asset
Управляет генерацией URL и версионизацией веб-ассетов, таких как CSS файлы, JavaScript, картинки.
BrowserKit
Эмулирует поведение браузера.
ClassLoader
Подгружает классы Вашего проекта автоматически при условии соблюдения некоторых PHP соглашений.
Config
Помогает находить, загружать, комбинировать, валидировать конфигурационные параметры.
Console
Облегчает создание красивых и тестируемых интерфейсов коммандной строки.
![Page 15: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/15.jpg)
Symfony Framework :: Модули (2)
CssSelector
Преобразует CSS селекторы в выражения XPath.
Debug
Предоставляет инструменты для облегчения отладки PHP кода.
DependencyInjection
Позволяет стандартизировать и централизовывать конструирование объектов в Вашем приложении.
DomCrawler
Упрощает навигацию по DOM для HTML и XML документов.
EventDispatcher
Реализует паттерн Медиатор просто и эффективно, что позволяет сделать проект легко расширяемым.
![Page 16: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/16.jpg)
Symfony Framework :: Модули (3)
ExpressionLanguage
Предоставляет движок компиляции и вычисления значений выражения.
Filesystem
Предоставляет основные утилиты для взаимодействия с файловой системой.
Finder
Позволяет осуществлять поиск по файлам и директориям через интуитивно понятный интерфейс.
Form
Предоставляет инструменты для простого создания и повторного использования HTML-форм.
Guard
Совмещает множество уровней аутентификации в единое целое, значительно облегчая создание сложных систем аутентификации, где у Вас есть полный контроль над процессом.
![Page 17: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/17.jpg)
Symfony Framework :: Модули (4)
HttpFoundation
Привносит объектно-ориентированный уровень для HTTP-спецификации.
HttpKernel
Предоставляет элементы построения гибких и высокопроизводительных фреймворков, основанных на HTTP.
Icu
Содержит данные библиотеки ICU. Компонент устарел. Используйте Intl вместо него.
Intl
Предоставляет «аварийный» вариант использования Intl для случаев, когда intl-выражения недоступны в среде выполнения.
Ldap
LDAP-клиент для PHP поверх стандартного ldap-расширения.
![Page 18: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/18.jpg)
Symfony Framework :: Модули (5)
Locale
Аварийный вариант на случай недоступности intl-выражений на целевой платформе. Устарел. Вместо него нужно использовать компонент Intl.
OptionsResolver
Позволяет конфигурировать объекты массивами опций.
Process
Выполняет команды в подпроцессах.
PropertyAccess
Предоставляет функции чтения/записи из/в объекты или массивы используя простой строковый синтаксис.
PropertyInfo
Извлекает информацию о свойствах PHP-классов используя популярные механизмы получения метаданных
(Doctrine, PHP Reflection, PHPdoc, и т.д.)
![Page 19: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/19.jpg)
Symfony Framework :: Модули (6)
Routing
Отображает HTTP-запросы на набор конфигурационных параметров.
Security
Предоставляет инфраструктуру для изощрённых систем авторизации.
Serializer
Преобразует объекты в определённый формат (XML, JSON, YAML, …) и обратно.
Stopwatch
Прозволяет выполнять профилирование кода.
Templating
Набор средств, полезных при построении различного рода систем шаблонизации.
![Page 20: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/20.jpg)
Symfony Framework :: Модули (7)
Translation
Набор средств для интернационализации приложения.
Validator
Набор инструментов для валидации классов.
VarDumper
Механизм обхода любой произвольной PHP-переменной.
Yaml
Загружает и формирует YAML-файлы.
![Page 21: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/21.jpg)
ORM: Doctrine
• Объектно-реляционный проектор для PHP >= 5.3.0
• Базируется на DBAL – слой абстракции от СУБД, поддерживает MySQL, PgSQL, Oracle, Sqlite
• Собственный объектный дилект DQL (похож на HQL)
• ООП конструктор запросов
• Основывается на идеях Hibernate
• Генерация DDL из маппинга, обновление существующей структуры БД
• Генерация маппинга и объектных сущностей из DDL
• Валидация данных
• Каскадные операции с сущностями
• Поддержка аннотаций
![Page 22: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/22.jpg)
Runtime
PHP-CGI
Классический CGI
PHP-FPM
С версии 5.3.3, для высоконагруженных сред, предоставляет некоторые дополнительные возможности
Apache Module
Подключаемый модуль
CLI
С версии 4.3.0, для приложений с интерфейсом командной строки
![Page 23: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/23.jpg)
Ложка дёгтя
• Несогласованный синтаксис функций и неортогональность
• Отсутствие обратной совместимости между версиями языка
• Отсутствие поддержки многобайтовых кодировок в ядре языка
• Отсутствие поддержки многопоточности
![Page 24: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/24.jpg)
Пример реального приложения :: Назначение
• CRM, электронный документооборот, хранение и обработка «тяжёлых» медиаданных
• Доступ по Web с ПК и мобильного телефона
• Гибкая система разграничения прав доступа
• Специальные обработчики контента дла определённых типов данных – транкодирование/потоковое вещание видео/аудио с подстройкой под ширину канала, аудиовизуальное «аннотирование» видео и PDF, «водные знаки» для видео, графики и документов
• Текстовые коммуникации между пользователями в приложении
• Email оповещения
• Система статусов и меток для хранимых документов, возможность организации в группы, установка метаданных
• Быстры полнотекстовый поиск, поиск по неограниченному числу параметров, поиск по специфичным параметрам, динамическое добавление критериев поиска
• API для интеграции с внешними системами
• Подсистема логирования, система иформеров, анализирующая логи и визулизирущая определённую информацию в максимально наглядном для пользователя виде.
![Page 25: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/25.jpg)
Пример реального приложения :: Производительность
До 15 тыс. сотрудников, работающих в приложении одновременно
![Page 26: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/26.jpg)
Пример реального приложения :: Архитектура
Web ClientHTML / AngularJS /
Bootstrap
CorePHP
Обработка клиентских запросов
MetaSilex, Doctrine
Бизнес-логика, доступ к данным, REST API
CDSМедиа ресурсы,
Redis, ФС QueuesФоновые задачи, RabbitMQ,
ZMQ
WorkerWorker
Worker
![Page 27: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/27.jpg)
Пример реального приложения :: Средавыполнения
Client CoreMeta
CDS
Queues
Load balancer Load balancer
Apache HTTPD
Nginx
MySQLSMTP
ZMQ
ElasticsearchoAuth
WebSockets PHP FPMRedis
Supervisor
ffmpegNFS
![Page 28: 2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий](https://reader033.vdocuments.mx/reader033/viewer/2022050613/589f033b1a28ab06368b6a1f/html5/thumbnails/28.jpg)
Q & A