Как в C унаследоваться от PDO

tony2001

TeaM PHPClub
Для этого есть php_pdo_get_dbh_ce(), которая возвращает нужный тебе class entry.
А зачем?
 

tony2001

TeaM PHPClub
насколько я вижу, никто не наследуется от PDO, все имплементят драйвер, который потом доступен через new PDO("driver://<options>");
смотри ext/pdo_mysql/pdo_mysql.c, например.
 

hell0w0rd

Продвинутый новичок
tony2001, нет-нет. Я имею ввиду расширение PDO не с точки зрения добавления драйвера, добавление/изменение методов.
А что на счет PDOStatement?
 

hell0w0rd

Продвинутый новичок
tony2001, В php мы можем запросто написать MySuperStmt extends PDOStatement. Как это сделать в Си?
 

tony2001

TeaM PHPClub
А, это.
в MINIT_FUNCTION:
Код:
my_class_entry = zend_register_internal_class_ex(&ce, <parent_class_entry>, NULL TSRMLS_CC);
Но для PDOStatement нет функции, чтобы получить его class entry.
Очевидно, это никому не нужно.
А зачем вам делать extends PDOStatement?
 

hell0w0rd

Продвинутый новичок
tony2001, есть такой язык - zephir. Он сейчас активно разрабатывается, его основная цель - транслироваться в код расширений под php.
Он во многом схож с php по синтаксису, и почти все в нем можно сделать, что и в php. Вот в это почти входит наследование от PDOStatement.
 

tony2001

TeaM PHPClub
В таком случае, решение - делать так же, как и сам PHP, т.е. искать по хэшу всех классов class entry от PDOStatement и от него наследоваться.
Если это не подходит, то шлите патчи. Вытащить наружу ce от PDOStatement - не проблема, просто никому это не нужно, кроме вас.
 

hell0w0rd

Продвинутый новичок
tony2001, zend_fetch_class - вот с помощью этого? А какой fetch_type?
Я вроде пробовал с помощью этой функции, но проблема была в том, что выскакивали сегфаулты. Я думаю это от того, что порядок инициализации расширений не определен.
 

tony2001

TeaM PHPClub
>zend_fetch_class - вот с помощью этого? А какой fetch_type?
вероятно. надо пробовать и смотреть.
какой fetch_type - это тебе надо разобраться, там флаги передаются для включения/выключения автолоада и пр.
 
Сверху