返回传入函数的相同数组(zval)

时间:2015-06-10 14:25:55

标签: php c php-extension

我尝试在我的扩展中创建一个新函数,它接受array作为参数向添加条目该数组的相同实例并再次返回该实例。

所以这是到目前为止的代码:

PHP_FUNCTION(make_array)
{
        // array_init(return_value); // Also Tried to transform default NULL to array

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &return_value) == FAILURE) {
                RETURN_FALSE;
        }

        add_assoc_long(return_value, "answer", 42);

        return;
}

但我只获得NULL作为返回值,或者如果我取消注释array_init(return_value);,则return_value是一个空数组。

那为什么会这样呢?我理解错了什么?

1 个答案:

答案 0 :(得分:2)

直接使用return_value作为ZPP参数的一部分通常不会(实际上,从不);它通常是通过引入常规zval *容器然后使用RETURN_ZVAL或RETVAL_ZVAL宏来完成的:

PHP_FUNCTION(make_array)
{
    zval *arr;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arr) == FAILURE) {
        return;
    }

    add_assoc_long(arr, "answer", 42);
    RETURN_ZVAL(arr, 0, 0);
}