PHP扩展:如何返回一个新的类对象

时间:2016-07-01 14:12:54

标签: php c php-extension

我正在创建一个包含多个类的扩展,其中一些包含应该返回另一个类的实例的方法。这适用于PHP 7+而不是其他任何内容。

例如,我需要PHP代码(我正在创建一个ALPM PHP扩展)...

$handle_object = new Handle("/", "/var/lib/pacman");
$db_object = $handle_object->get_localdb() /* this returns a Db object */

到目前为止我的代码是......

PHP_METHOD(Handle, get_localdb) {
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
        RETURN_NULL()
    }

    zval *db_obj = (zval*)emalloc(sizeof(zval));
    handle_object *intern = Z_HANDLEO_P(getThis());

    object_init_ex(db_obj, alpm_ce_db);
}

我不知道我是在正确的轨道上还是远离它。

对于项目中的更多代码(到目前为止),我已将其发布在gist(https://gist.github.com/markzz/27b0aa1123d61a5f9d80ee3aea390f20)上。

1 个答案:

答案 0 :(得分:0)

在php聊天的帮助下(谢谢你们)!

PHP_METHOD(Handle, get_localdb) {
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
        RETURN_NULL()
    }

    handle_object *intern = Z_HANDLEO_P(getThis());
    db_object *db;
    object_init_ex(return_value, alpm_ce_db);
    db = Z_DBO_P(return_value);
    db->db = alpm_get_localdb(intern->handle);
}