我尝试在我的扩展中创建一个新函数,它接受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
是一个空数组。
那为什么会这样呢?我理解错了什么?
答案 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);
}