библиотеку классов сунуть в экстеншн

fisher

накатила суть
библиотеку классов сунуть в экстеншн

чуть более развернуто: идея следующая. существует библиотека классов, которая используется в очень большом количестве проектов. теоретически код этих классов можно не инклюдить постоянно в приложениях, а иметь как экстеншн пхп по причинам быстроты и простоты. но должна быть полная замена базового пхп-кода, т.е. пересобрав пхп и "вытирая" объявления базовых классов все остальное должно остаться без изменений: базовые классы создаются с какими-то дефолтными атрибутами, пользовательские классы могут наследовать от базовых и тд. хочется понять, имеет ли смысл двигаться в этом направлении.
в ./ext есть парочка расширений с использованием объектных фич zend api, разбираюсь с ними сейчас, вроде теоретически ограничений нет. помню, был когда-то разговор о желании сделать php_templates подобным образом, но вроде так и не сделали - или сделали? прямой вопрос в php-dev от одного чувака, который хотел сделать примерно то же самое - так и остался без ответа
http://www.zend.com/lists/php-dev/200307/msg00591.html
если кто знает, что есть примеры реализации такого подхода, поделитесь, плз
 

fisher

накатила суть
1. возможно ли вообще это сделать с помощью первого zend api. будет ли это актуально для второго.
2. делал ли это кто-нибудь из участников форума, или видел ли нормальную реализацию такого подхода? если да - поделитесь информацией, буду премного благодарен. особенно если будет возможность поглядеть исходники.
 

confguru

ExAdmin
Команда форума
Посмотри исходники
php_templates
там вроде все понятно
 

tony2001

TeaM PHPClub
>1. возможно ли вообще это сделать с помощью первого zend api. будет ли это актуально для второго.
да (встроенные объекты есть - см. [m]dir[/m], например).
да (API имхо почти не меняется, только добавляются новые фичи, иначе бы многое пришлось просто переписывать).

>2. делал ли это кто-нибудь из участников форума, или видел ли нормальную реализацию такого подхода?
нечто подобное - да (патчил ОО-интерфейс в LOB'ам в OCI8).
не могу сказать, что я после этого стал полноценным спецом по Zend API, но что-то понял.

>если да - поделитесь информацией, буду премного благодарен.
вся теория здесь: http://zend.com/zend/api.php
по моему опыту, она полезна для однократного прочтения, просто чтобы понять принципы.

>особенно если будет возможность поглядеть исходники.
конечно =) it's OpenSource =)
http://cvs.php.net/co.php/php-src/ext/oci8/oci8.c
http://cvs.php.net/co.php/php-src/ext/oci8/php_oci8.c

там достаточно много всего, но, вероятно, тебе будет интересна только малая часть:
поддержка коллекций (она тоже ОО) отделена от всего кода ifdef'ами:
#ifdef PHP_OCI8_HAVE_COLLECTIONS
соотв-но, все, что внутри - это фактическая реализация функций + ОО-интерфейс к ним.
но ограничиваться этим однозначно не стоит - попробуй посмотреть какие-нибудь небольшие ОО-экстеншены из PECL'a, например xmms.
пример использования функций, макросов лучше смотреть в сорцах с небольшой оглядкой на доку по API.
многие вещи достаточно просто решаются - я знаю, что что-то подобное есть в какой-то из существующих функций и подсматриваю там принципы.
очень помогает.
 

fisher

накатила суть
>>слово "простота" тут явно лишнее
ммм, ну всё относительно, конечно :)
>>Посмотри исходники
>>php_templates
пасиб, щас качну последнюю версию, но мне казалось, у него ещё нет объектной реализации...
 

tony2001

TeaM PHPClub
>пасиб, щас качну последнюю версию, но мне казалось, у него ещё нет объектной реализации...
её там и нет.
кроме того, имхо не самый простой пример - там много заморочек с обработкой текста, которые к твоей проблеме отношения не имеют.
 

tony2001

TeaM PHPClub
P.S. Smarty изначально планировали делать как экстеншен, но передумали - либу такой сложности значительно проще поддерживать и развивать на PHP, а не на Сях.
 

fisher

накатила суть
tony, спасибо. и oci8 я смотрел, и патч твой видел - но мне показалось, что это не совсем в тему. доку по zend.api я конечно тоже читал, это действительно именно для одноразового прочтения, и то по объектам там далеко не всё - разбирался я по исходникам ming. xmms щас гляну.
 

tony2001

TeaM PHPClub
>то по объектам там далеко не всё - разбирался я по исходникам ming
о том и речь.
лучший помощник в данном случае - уже написанные сорцы.
 

fisher

накатила суть
>>её там и нет.
во-во
2HEm:
да я в самом первом посте как раз о проекте su1d и написал, просто помню, что так когда-то хотели так сделать
 

fisher

накатила суть
короче, с простыми вещами разобрался вроде. в копилочку - занятный документ нашел с примером именно этой задачки, правда, с упором на зенд2.
www.nme.at/download/phpcon03a_zend_engine_2_internals.pdf
 

su1d

Старожил PHPClubа
менять что-то в уже готовой либе (стирать определения классов, как было сказано) -- довольно таки глупо.
нужно лишь сделать некий wrapper к либе, который бы помимо всего прочего ещё был бы и своеобразным gateway'ем между C-интерфейсом ZendAPI и С++-интерфейсом либы.
из С++ файла экспортируй функции в "С":

extern "C" {
void func(void) {}
}

сам не пробовал, но должно работать.
 

fisher

накатила суть
2su1d: погоди, никакой c++ либы нет. рассматривается задача переписать код php-библиотеки классов как нормальный честный екстеншн, на сях с использованием объектных фич zend-движка. грубо говоря, чтобы при использовании пересобранного пхп в приложении девелопер работал бы с классами библиотеки так же, как если бы он взял честный пхп-код с определением классов и подключил бы его вначале
 
Сверху