Как сделать автолоадер в расширении?

vGhost

Новичок
Как сделать автолоадер в расширении? Т.е. аналог вот этого:

PHP:
<?php

spl_autoload_register('c2delphiwrapper_loader');
Гуглить пробовал, но всё что находил это 100500 ресурсов про то как автолоадеры на php делаются, а мне именно в расширении надо. Если кто скинет ссылочку где про это почитать можно, буду очень рад.
 

AnrDaemon

Продвинутый новичок
Автолоадер чего в чём? А то вопрос ваш растянут в бесконечность.
 

vGhost

Новичок
Ох, я вроде бы понятно написал, что мне надо выше написанный php код реализовать в расширении на сях.

Ну окей, в общем вот излишние подробности, есть у меня такой вот код в расширении:
Код:
ZEND_FUNCTION(c2delphiwrapper_loader)
{
    char *class_name;
    int class_name_len;

    if (zend_parse_parameters(1 TSRMLS_CC, "s", &class_name, &class_name_len) == FAILURE) {
        zend_error(E_ERROR, "Wrong call method", "");
        RETURN_FALSE;
    }

    if (strcmp(class_name, "Delphi\\") == 1) {
        zend_class_entry e, *ce;
        char *obj_lqcn = (char *)emalloc(class_name_len + 1);
        char *obj_qcn = estrndup(class_name, class_name_len);

        zend_str_tolower_copy(obj_lqcn, class_name, class_name_len);

        INIT_CLASS_ENTRY(e, obj_qcn, NULL);
        e.name = obj_qcn;
        e.name_length = class_name_len;

        ce = (zend_class_entry*)emalloc(sizeof(zend_class_entry));
        *ce = e;
        zend_initialize_class_data(ce, 0 TSRMLS_CC);

        zend_hash_add(CG(class_table), obj_lqcn, class_name_len + 1, (void **)&ce, sizeof(zend_class_entry *), NULL);
        zend_do_inheritance(ce, c2dw_class_entry TSRMLS_CC);
        RETURN_TRUE;
    } else {
        RETURN_FALSE;
    }
}
который является реализацией следующего php кода:
PHP:
<?php
function c2delphiwrapper_loader($class) {
    if ($class[0] == '\\') {
        $class = substr($class, 1);
    }
    if (substr($class, 0, 7) == 'Delphi\\') {
        $namespace  = substr($class, 0, strrpos($class, '\\'));
        $class      = substr($class, strrpos($class, '\\') + 1);
        eval('
            namespace ' . $namespace . '
            {
                class ' . $class . ' extends \\Delphi\\C2DelphiWrapper { }
            }
        ');
    }
}
spl_autoload_register('c2delphiwrapper_loader');
саму процедуру c2delphiwrapper_loader я реализовал, а вот как реализовать вот эту часть пхп кода:
PHP:
spl_autoload_register('c2delphiwrapper_loader');
Я не знаю, вот и спрашиваю.
 

Bitch)

Новичок
Ну так если тебе нужен аналог функции spl_autoload_register то пойди и возьми исходник php_spl
А вообще я тоже тут не случайно :rolleyes:
 

AnrDaemon

Продвинутый новичок
Очень просто - никак. Все бинарные расширения нужно явно грузить в конфиге.
 
Сверху