从 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# 中为返回自定义结构的函数获取错误的参数值

php的参数函数与可变参

C++函数默认值与函数重载

从 PHP Web 应用程序调用 C++ 库:system() 与 SWIG PHP 扩展?

C++复习