C语言 PHP zend_call_method,带有通过引用传递的参数



我目前正在将我们的PHP扩展从PHP5重写为PHP7。要从我们的 C/C++ 代码调用 PHP 方法,我们使用 Zend/zend_interfaces.c 中略微修改的zend_call_method(使用超过 2 的参数(。现在我发现它不适用于通过引用传递的参数,

public function FuncWithRef(array &$changeThis)

如果在 PHP 代码中更改了它们,则 C 部分中的 zval 值不会受到影响。在 PHP5 中,该值按预期被覆盖,稍后可以在 C 代码中使用。

以前,函数调用的zend_fcall_info结构体仅由

params[0] = &arg1;

在 PHP7 中,这被更改为

ZVAL_COPY_VALUE(&params[0], arg1);

函数执行(zend_call_function(后,fci.paramsarg1仍然包含原始的zval值,在PHP代码中所做的更改不可用。我尝试了使用 DUP 而不是 COPY 之类的方法,但没有结果。有什么办法可以解决这个问题吗?我主要搜索和比较 PHP/ext 文件夹中的代码片段,看看事情是如何从 PHP5 重写到 PHP7 的,这似乎是我缺少的最后一部分。

PHP5 和 PHP7 方法在zend_call_method中的两个区别:

fci.no_separation = 0;

必须设置。然后在zend_call_function内部更改 fci.params,然后必须手动将它们复制回zend_call_method输入参数。

相关内容

  • 没有找到相关文章

最新更新