SlideShare une entreprise Scribd logo
1  sur  47
Аспектно-ориентированное
программирование в PHP
Лисаченко Александр, архитектор web-приложений Alpari-RU
О докладчике
Лисаченко Александр
• Архитектор веб-приложений в Alpari
• Опыт работы во всех основных направлениях
PHP-разработки (highload, бизнес-
приложения, веб-сервисы, соц. сети)
• Идеолог Symfony2: почти десяток внутренних
сервисов на Symfony2, в т.ч. и основной сайт
alpari.ru (CDN, Varnish+ESI, Twig, Assetic, ~60
сабмодулей, ~20 бандлов)
Twitter: @lisachenko
Github: https://github.com/lisachenko
Эволюция технологий
Машинное программирование
Структурированное программирование
Процедурное программирование
Модульное программирование
Объектно-ориентированное программирование
???
Логические единицы кода
• Функции
• Процедуры
Процедурное
• Модули
Модульное
• Классы
• Методы
• Свойства
ООП
Принцип единственной отвественности
Принцип единственной отвественности
Сквозная функциональность
Сквозная функциональность
Сквозная
функцио-
нальность
Авторизация
Обработка ошибок
Кэширование
Ведение логов
Управление авторизацией
Журналирование
Обработка ошибок
Матрешка функциональности
Авто-
ризация
Логиро-
вание
Обра-
ботка
ошибок
Основ-
ной код
Почему это плохо?
Плюсы:
• Видна вся логика метода
Минусы:
• Код нельзя использовать
повторно
• трудно понять исходное
предназначение класса
• запутанная логика
• больше вероятность
допустить ошибку, забыв
вписать «шаблонный»
код
• нарушение принципа DRY
Аспектное программирование
Процедурное
программирование
ООП
АОП
Аспектно-ориентированное программирование
АОП - методика программирования в
рамках классовой парадигмы,
основанная на понятии аспекта —
блока кода, инкапсулирующего
сквозное поведение в составе
классов.
Аспектно-ориентированное программирование
Методология АОП была предложена группой
инженеров исследовательского центра Xerox
PARC под руководством Грегора Кичалеса
(Gregor Kiczales).
Ими же было разработано аспектно-
ориентированное расширение для языка Java,
получившее название AspectJ — (2001 год).
Аспектно-ориентированное программирование
АОП дает возможность
вызвать дополнительный код
(хук) в определенный
момент работы программы:
до выполнения метода,
после выполнения метода,
при обращении к свойству и
другим без изменения
исходного кода программы!
Ключевые понятия и термины
Аspect-
Oriented
Program-
ming
Joinpoint
Pointcut
Advice
Aspect
Introduction
Ключевые понятия и термины
Aspect
• Модуль или класс,
реализующий сквозную
функциональность.
• Аспект изменяет поведение
остального кода, применяя
совет в точках соединения,
определённых некоторым
срезом
Advice
(совет)
• Дополнительная логика,
которая должна быть
вызвана из точки соединения
Ключевые понятия и термины
Joinpoint
• Точка в выполняемой
программе, где следует
применить совет
• Выполнение метода,
обращение к свойствам
объекта и др.
Pointcut
(срез)
• Набор точек соединения.
• Срез определяет, подходит
ли данная точка соединения
к данному совету
Пример: паттерн FluentInterface
Method execution joinpoint
Property access joinpoint
Пример: паттерн FluentInterface
Advice
Pointcut
definition
Aspect class
Процесс вплетения кода
Перехват
include/require
Stream wrapper
(php://filter)
Статический
анализ кода
(token_get_all)
TokenReflection
Анализ
Pointcut-ов
Модификация
исходного кода
Пример: паттерн Fluent Interface
Around advice
Original method
Original
method
AOP
Фреймворк Go! AOP PHP
• Не использует PHP-расширений, целиком написан на самом
PHP;
• Может быть использован с любым приложением на PHP;
• Оптимизирован (ленивая загрузка ядра, кэширование
классов, поддержка опкод-кэшеров)
• Не требует DI-контейнера для подмены сервисов прокси-
объектами;
• Может перехватывать динамические и статические методы,
методы в финальных классах, а также методы в трейтах;
• Может перехватывать обращения к публичным и
защищенным полям;
• Чистый генерируемый код, удобно проводить отладку
классов и аспектов с помощью XDebug
Срезы точек в Go! AOP PHP
1. Выполнение методов
1. Динамических: execution(public Example->method(*))
2. Статических: execution(public **::*someStatic*Method*(*))
3. Защищенных: execution(protected Ns**Example->protected*(*))
4. С аннотацией: @annotation(FirstSecondAnnotationClass)
2. Все методы в определенном классе
1. Конкретный класс: : within(GoAspectsTest)
2. В указанном неймспейсе: within(GoAspects*)
3. Включая суб-неймспейсы: within(GoAspects**)
4. Потомки конкретного класса: within(DemoInterface+)
3. Обращение к свойствам
1. Публичные: access(* ExampleAspect*->property*)
2. Защищенные: access(protected TestClass*->protected*Property)
4. Логические
1. ИЛИ : within(A) || within(B)
2. И: within(A) && within(B)
3. НЕ: !within(A)
Типажи (trait) в PHP – хорошо или плохо?
Хорошо Плохо
Пример: trait + interface + AOP = Introduction
Introduction
• возможность динамически
подключать интерфейсы и типажи к
конкретному классу.
Пример: trait + interface + AOP = Introduction
Исходный класс
•Обратите внимание, что мы не
имплементриуем интерфейсов и не
подключаем типажи в исходном классе.
Пример: trait + interface + AOP = Introduction
Класс после вплетения кода
•К классу был добавлен динамически
заданный интерфейс и типаж
Пример: логирование на уровне приложения
Пример: логирование на уровне приложения
За и против глобальных срезов
За
•Позволяет сделать срез в
любом коде, даже стороннем
•Легко описать нужный
неймспейс
•Быстрота внедрения
•Не нужно менять исходный
код вообще
Против
•Action at a distance –
непредсказуемые эффекты в
коде методов
•Цепляет и нужное и
ненужное
•Может немного замедлить
приложение из-за большого
количества точек
•Высока вероятность
допустить ошибку
Пример: логирование на уровне приложения
Контроллируемые срезы
За
•Используются стандартная
технология интерфейсов-
маркеров и срез
within(InterfaceName+)
•Используются наглядные
аннотации-маркеры перед
методами и срез
@annotation(ClassName)
•Влияют только на указанный
разработчиком код
(ожидаемое поведение)
Против
•Необходимо вносить
небольшие правки в исходный
код
•Ограниченная возможность
работать с сторонним кодом
Проблема с доступом к состоянию объекта
1. Как вы уже наверное поняли, основное
достоинство настоящего АОП – это возможность
дополнять логику методов или целого класса
дополнительным функционалом без изменения
исходного кода.
2. Но класс аспекта является внешним по
отношению к классу перехватываемого
объекта, а значит, мы можем пользоваться
только публичными данными объекта, а что
делать если нужно обратиться к приватным или
защищенным полям или методам объекта?
Привилегированные советы
Привилеги-
рованный
совет
• Совет (метод) в классе аспекта,
который выполняется в области
видимости текущего объекта и
имеет доступ к приватным и
защищенным полям и методам
класса
Попробуем считать поле $name в совете
Обычный совет работает согласно scope
Привилегированный совет
Привилегированный совет в scope объекта
АОП – следующий шаг в развитии PHP
ООП
Абстракция
сервисов
(yaml, xml,
php)
Внедрение
зависи-
мостей
(IoC, DIC)
Аспектно-
ориентиро-
ванное
программи-
рование
AOP: за и против
За
•Управление сквозной
функциональностью
•Снижение стоимости
разработки
•Более прозрачный код логики
•Уменьшение шаблонных ошибок
•Уменьшение связанности
классов
•Повторное использование кода
Против
•Порог вхождения
•Неявные эффекты
•Ограниченная помощь IDE
•Незначительное снижение
скорости выполнения кода
Благодарю за внимание!
Go! AOP PHP: https://github.com/lisachenko/go-aop-php
Official site: http://go.aopphp.com
ZendFramework2 demo: http://zf2.aopphp.com/?aspect

Contenu connexe

Tendances

Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья КудиновCodeFest
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Mykhailo Poliarush
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестированияCodeFest
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Feature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехFeature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехСбертех | SberTech
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for YandexMax Lapshin
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграцииIgor Khrol
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Тимур Шевляков
Тимур ШевляковТимур Шевляков
Тимур ШевляковCodeFest
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий МантулаFwdays
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиSQALab
 
Automated tests ci
Automated tests ci Automated tests ci
Automated tests ci COMAQA.BY
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Sergey Ryabenko
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaNikita Lipsky
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляCOMAQA.BY
 
Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in PythonIgor Khrol
 

Tendances (20)

Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестирования
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Feature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехFeature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТех
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграции
 
Take a Look at Akka-Java
Take a Look at Akka-JavaTake a Look at Akka-Java
Take a Look at Akka-Java
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Тимур Шевляков
Тимур ШевляковТимур Шевляков
Тимур Шевляков
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестами
 
Automated tests ci
Automated tests ci Automated tests ci
Automated tests ci
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на Java
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуля
 
Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in Python
 

En vedette

Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...
Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...
Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...web2win
 
Максим Лагутин, "Угрозы безопасности для интернет-магазинов и бизнеса в инт...
 Максим Лагутин, "Угрозы безопасности для  интернет-магазинов и бизнеса в инт... Максим Лагутин, "Угрозы безопасности для  интернет-магазинов и бизнеса в инт...
Максим Лагутин, "Угрозы безопасности для интернет-магазинов и бизнеса в инт...web2win
 
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?CodeFest
 
TMPA-2013 Kompan and Bui: OOP Class Diagrams
TMPA-2013 Kompan and Bui: OOP Class DiagramsTMPA-2013 Kompan and Bui: OOP Class Diagrams
TMPA-2013 Kompan and Bui: OOP Class DiagramsIosif Itkin
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаAleksandr Makhomet
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромKirill Kovalchuk
 
Digital Solutions With MultiSoft
Digital Solutions With MultiSoftDigital Solutions With MultiSoft
Digital Solutions With MultiSoftRobert Proctor
 
Practical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsPractical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsAlex Clark
 
Private Detective in Jalandhar
Private Detective in Jalandhar Private Detective in Jalandhar
Private Detective in Jalandhar Punjab Detective
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled PresentationBITCOIN INDIA
 
How to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorHow to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorJoel Gardner
 
How to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurHow to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurEnvato
 
How JESS3 Saved Christmas!
How JESS3 Saved Christmas!How JESS3 Saved Christmas!
How JESS3 Saved Christmas!JESS3
 
Modern Architectural Masterpieces - design masterpieces
Modern Architectural Masterpieces -  design  masterpiecesModern Architectural Masterpieces -  design  masterpieces
Modern Architectural Masterpieces - design masterpiecesMakala D.
 
Embracing Iterative Design
Embracing Iterative DesignEmbracing Iterative Design
Embracing Iterative DesignMike Rohde
 
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Lora Cecere
 
F inland and the helsinki spring 090811
F inland and the helsinki spring 090811F inland and the helsinki spring 090811
F inland and the helsinki spring 090811Stanford University
 

En vedette (19)

Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...
Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...
Денис Донченко, 1С-Битрикс: "Масштабирование интернет-магазина: какие бывают ...
 
Максим Лагутин, "Угрозы безопасности для интернет-магазинов и бизнеса в инт...
 Максим Лагутин, "Угрозы безопасности для  интернет-магазинов и бизнеса в инт... Максим Лагутин, "Угрозы безопасности для  интернет-магазинов и бизнеса в инт...
Максим Лагутин, "Угрозы безопасности для интернет-магазинов и бизнеса в инт...
 
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?
Эффективная, вовлеченная команда энтузиастов. А ты готов к этому?
 
TMPA-2013 Kompan and Bui: OOP Class Diagrams
TMPA-2013 Kompan and Bui: OOP Class DiagramsTMPA-2013 Kompan and Bui: OOP Class Diagrams
TMPA-2013 Kompan and Bui: OOP Class Diagrams
 
OOP
OOPOOP
OOP
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Aнглийский сленг (P-T)
Aнглийский сленг (P-T)Aнглийский сленг (P-T)
Aнглийский сленг (P-T)
 
Digital Solutions With MultiSoft
Digital Solutions With MultiSoftDigital Solutions With MultiSoft
Digital Solutions With MultiSoft
 
Practical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile appsPractical cheminformatics workflows with mobile apps
Practical cheminformatics workflows with mobile apps
 
Private Detective in Jalandhar
Private Detective in Jalandhar Private Detective in Jalandhar
Private Detective in Jalandhar
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
How to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning InstructorHow to Teach Like an Award-winning Instructor
How to Teach Like an Award-winning Instructor
 
How to Get Started as a Web Entrepreneur
How to Get Started as a Web EntrepreneurHow to Get Started as a Web Entrepreneur
How to Get Started as a Web Entrepreneur
 
How JESS3 Saved Christmas!
How JESS3 Saved Christmas!How JESS3 Saved Christmas!
How JESS3 Saved Christmas!
 
Modern Architectural Masterpieces - design masterpieces
Modern Architectural Masterpieces -  design  masterpiecesModern Architectural Masterpieces -  design  masterpieces
Modern Architectural Masterpieces - design masterpieces
 
Embracing Iterative Design
Embracing Iterative DesignEmbracing Iterative Design
Embracing Iterative Design
 
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
Supply Chain Insights' Financial Benchmarking Examples - 27 AUG 2013
 
F inland and the helsinki spring 090811
F inland and the helsinki spring 090811F inland and the helsinki spring 090811
F inland and the helsinki spring 090811
 

Similaire à Aspect-Oriented Programming in PHP

Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Fwdays
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаГеоргий Драк
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...OWASP Russia
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?DotNetConf
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 

Similaire à Aspect-Oriented Programming in PHP (20)

Sivko
SivkoSivko
Sivko
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчика
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 

Dernier (9)

Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 

Aspect-Oriented Programming in PHP