php - 返回传递给函数的相同数组 (zval)

标签 php c php-extension

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

这是到目前为止的代码:

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是一个空数组。

那么为什么会出现这种行为呢?我到底理解错了什么?

最佳答案

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

关于php - 返回传递给函数的相同数组 (zval),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759267/

相关文章:

php - 动态 Paypal 按钮加密

使用递归反转堆栈的 C 程序

c - 执行 HTTP POST 和使用响应的简单 C 示例

C 在循环中将输入读入 char 数组

symfony - 找不到类 Symfony2

php - Laravel Eloquent 限制每个用户的结果 - 日期组合

PHP 单行代码检查数组中是否有任何值超过 5

php - 如何停止 PHP 脚本?

php - ArrayAccess 如何工作?

未安装/加载/启用 PHP 扩展,使用官方 PHP docker 镜像