我尝试在我的扩展中创建一个新函数,该函数采用数组
作为参数,向该数组的同一实例添加一个条目,并再次返回该实例。
这是到目前为止的代码:
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/