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);
}
我试图在我的扩展中创建一个新函数,它接受一个 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);
}