PHPForza - АОП библиотека

master_x

Pitavale XXI wieku
PHPForza - АОП библиотека

PHPForza - новая АОП библиотека
Предлагаю вашему вниманию библиотеку предоставляющую АОП (аспектно-ориентированное программирование) возможности в PHP.
Библиотека не является простым ткачом (weaver) с процессом: написание аспекта, написание скрипта, выполнение специальной программы слияния аспекта и скрипта; при помощи PHPForza все аспекты применяются и отменяются во время выполнения скрипта.
Плюсы библиотеки:
- время разработки приложения уменьшается
- динамические аспекты (применение и отмена в любом месте программы)
- аспекты можно создавать в любом месте программы, до объявления класса или после
- PHPForza не требует других библиотек (runkit к примеру)
- для объявления точек среза (pointcuts) можно использовать маску (*, wildcard) а также специальные regexp- совместимые символы (альтернатива, указание длины слова, класс символов и т.д.)
Минусы (не критичные):
- для запуска PHPForza желателен PHP 5.2. Библиотека будет работать и на младших версиях, однако если обрабатываемый PHPForza скрипт будет содержать parse errors, apache прекратит свою работу с segfault. Это внутренний баг PHP до версии 5.2, связанный с streams который был исправлен Tony, если я не ошибаюсь
- любой скрипт к которому надо применить аспект, должен подключаться черз include или require со специальной схемой forza://. В принципе, это не является проблемой в хорошо спроектированных приложениях. PHPForza также сканирует поключаемый скрипт на наличие include и require и заменяет все вхождения на include/require со схемой forza:// автоматически.

Пока еще ничего неизвестно о скоростных характеристиках библиотеки. Я проводил поверхностные и нечистоплотные =) тесты и могу сказать что все зависит от размера обрабатываемого скрипта и от количества применяемых аспектов. В общем выходит довольно шустро, так как велосипедов в приложении нет, все основанно на стандартных функциях PHP. На ближайших выходных я проведу "настоящие" тесты и выясню скорость работы.
А пока жду комментариев, конструктивной критики, пожеланий, указаний на баги.
Ссылка на архив: phpforza.net/download.php

PS: хотел тему создать на agiledev.ru, если кто здесь тусуется с того форума, подскажите а надо ли?
 

atv

Новичок
Интересный подход. А чего не доделал? Around, Catch как будут выглядеть при таком подходе?

Пример попробовал, но он не сработал HTML код:
<? echo "Method ",$__phpf__[0]," of class ",$__phpf__[1], "<br />" ?>Hello

т.е. в броузере видно только " ?>Hello

Версия PHP 5.1.6
 

master_x

Pitavale XXI wieku
atv
а подробней можно про то что не сработало, а то у меня все работает =) просто напиши, если не трудно, код который не работает.
так и знал что будет вопрос про around... пока думаю над ответом.
 

zerkms

TDD infected
Команда форума
master_x
безусловно - там (на агиле) есть как почитатели аоп, так и авторы таких библиотек
 

atv

Новичок
а подробней можно про то что не сработало
Я ж написал что приходит в броузер: <? echo "Method ",$__phpf__[0]," of class ",$__phpf__[1], "<br />" ?>Hello

Видимо где-то eval() не сработал.

Я немного поковырялся в твоём коде. Мне не понятно зачем вызывать аспекты через include("forza-eval://1:0@0/");. Ты всёравно вносиш изменения в код, так поставь вызов функции, зачем инклюд? Тогда и с around проще получиться.

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

Теперь по поводу "Библиотека не является простым ткачом (weaver)". Так у тебя тоже происходит прекомпиляция исходного кода, к тому же при каждом запуске приложения, а это минус по сравнению "с процессом: написание аспекта, написание скрипта, выполнение специальной программы слияния аспекта и скрипта;", так как в этом случае компиляция выполняется один раз.

Вот такие мои замечания.
 

master_x

Pitavale XXI wieku
atv
Молодец, садись, два.
Во-первых, я тебя просил полностью привести код, который у тебя не работает, ты привел содержание advice и радуешься.
Насчет инклюда, если бы то понял какой механизм задействован в библиотеке, то у тебя не возникло бы такого вопроса.
но это не есть гуд, значит записываем в минусы.
ага, теперь объясни почему? докажи.
или ты провел тесты и выяснил, что инклюд в каждом методе это чудовищно медленно? а ты знаешь что это за инклюд? что это очень и очень хитрый инклюд?
да, и еще, будет around после выходных.
PS: ни одного вызова eval() в библиотеке нет. я не самоубийца.

-~{}~ 09.02.07 14:10:

кстати насчет нерабочего кода:
исправь <? на <?php. У тебя в конфиге short_open_tag=Off
 

atv

Новичок
Интересная реакция на конструктивную критику :eek:

Ладно, я не гордый, сяду.
 

master_x

Pitavale XXI wieku
atv
по-существу: твоя "конструктивная" критика, которую ты сразу пошел записывать в минусы (не разобравшись) оказалась абсолютно неконструктивной. Код твой запустился? Я думаю что да. А если так, то почему ты сразу вспоминаешь про свою гордость? Извини, если мой тон ущемил твою гордость, но я привык к короткому и ясному изложению проблемы с фактами.
 

StUV

Rotaredom
ага, теперь объясни почему? докажи.
или ты провел тесты и выяснил, что инклюд в каждом методе это чудовищно медленно? а ты знаешь что это за инклюд? что это очень и очень хитрый инклюд?
master_x
имхо, по контексту треда - доказывать должен ты
вместо нахваливания своего произведения и наездов на тех, кто тратит свое время на аудит твоего кода
 

master_x

Pitavale XXI wieku
StUV
это уже флейм и ты это понимаешь. я сколько раз попросил человека показать реальный код? Он показал? А потом про минусы я как-то сам распишу. Он не разобрался ни в коде ни в работе библиотеки, но зато оскорбился.
В общем, приношу свои извинения, если что написал не так.
 
Сверху