从 C++ 中的 PHP 扩展获取函数参数值
Posted
技术标签:
【中文标题】从 C++ 中的 PHP 扩展获取函数参数值【英文标题】:Getting function argument value from PHP extension in c++ 【发布时间】:2019-09-24 03:49:26 【问题描述】:我已经在c++中创建了php扩展。在php 5.6版本中可以获取当前执行的函数细节。我得到的参数值如下,
if (real_execute_data->function_state.arguments)
void **p = real_execute_data->function_state.arguments;
int arg_count = (int)(zend_uintptr_t)* p;
zval *argument_element;
for (i = 0; i < arg_count; i++)
argument_element = (zval*)*(p - (arg_count - i));
// here can reads the value from argument_element
在 PHP 7.2 版本中,我在 Zend_execute_data 中找不到 function_state 结构。我尝试使用 _zend_arg_info 结构,它给出了函数参数变量名称,而不是值。 如何在上面的 php 7 中获取函数参数值?
【问题讨论】:
你检查过wiki.php.net/phpng-upgrading 吗? 【参考方案1】:是的。我得到了它。 在php 7及以上我们可以得到函数参数如下(zend_execute_data *real_execute_data),
int arg_count = ZEND_CALL_NUM_ARGS(real_execute_data);
int i;
for (i = 1; i <= arg_count; i++)
zval *argument_element = ZEND_CALL_ARG(real_execute_data, i);
// we can reads the argument value from "argument_element".
【讨论】:
以上是关于从 C++ 中的 PHP 扩展获取函数参数值的主要内容,如果未能解决你的问题,请参考以下文章
c++函数给一个形参赋予了默认值,则实参是否可以不写这个参数
为啥 C++ 从 C# 中为返回自定义结构的函数获取错误的参数值