Return 与传入函数的相同数组 (zval)

Return same array (zval) as passed in to a function

我试图在我的扩展中创建一个新函数,它接受一个 array 作为参数添加一个条目到 数组的相同实例和 return又是那个例子。

到目前为止,这是代码:

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 作为 return 值,或者如果我取消注释 array_init(return_value);return_value 是一个空数组。

那么为什么会出现这种行为?我哪里理解错了?

直接使用 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);
}