PHP - статьи


Аспектно-Ориентированная Разработка ПО на PHP


В настоящий момент имеется ряд инициативных проектов, авторы которых представили различные способы реализации АОП и PHP. В проекте aoPHP представлен препроцессор PHP, написанный на Java 1.5. Мы можем писать привычный PHP-код, но должны будем сообщать препроцессору о нашем желании приобщения к АОП. Для этого вместо конструкции <?PHP .. ?> мы будем использовать <?AOPHP ?>. Сквозную функциональность мы сможем разместить в отдельных скриптах.

before(): execr(add($x,$y)) | execr(sub($x,$y)){ echo "<font color=red>Im About To Add/Sub $x & $y</font><br>"; }

Эти скрипты при необходимости могут быть задействованы путем указания при декларации кода AOPHP

<?aophp filename="aotest.aophp,aotest2.aophp" debug="off" // PHP code ?>

В проекте Seasar.PHP применен иной путь. Здесь для структурирования деклараций аспектов используется XML, а компоновку производит сам PHP, после чего выполняет результирующий код посредством функции eval().

В проекте MFAOP используется принцип, немного похожий на тот, что я демонстрировал выше в примерах. Автор проекта рекомендует первоначально назначить некоторый Poincut и в дальнейшем уже его применять в различных аспектах.

$pointCut = new PointCut(); $pointCut->addJoinPoint('Example', 'Foo'); $pointCut->addJoinPoint('Example', 'Bar'); $test1 = new Aspect($pointCut, before, 'echo "Before $MethodName";'); $test2 = new Aspect($pointCut, after, 'echo "After $MethodName";');

В отличие от библиотеки aop.lib.php в данном решении у вас нет необходимости расставлять "оповещатели" "вручную" для каждой функции. Но придется инсталлировать на сервере дополнительное расширение PHP PECL Classkit.

На мой взгляд, наиболее элегантное решение получилось у авторов проекта PHPAspect. Это стало возможным благодаря эффективному использованию новых возможностей PHP5, в частности, возможности создания абстрактных классов. PHPAspect вводит специальную конструкцию в язык PHP, которая наглядно представляет декларируемый аспект.




Начало  Назад  Вперед

уникальный контент полиграфия одесса Игра строительство города

Книжный магазин