Получение значения аргумента функции из расширения PHP в c ++ - PullRequest
2 голосов
/ 06 мая 2019

Я создал расширение php на c ++. В версии 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 я не могу найти структуру function_state внутри Zend_execute_data. Я пытался использовать структуру _zend_arg_info, она дает имена переменных аргументов функции, а неценности.Как я могу получить значение аргументов функции в php 7 выше?

1 Ответ

0 голосов
/ 07 мая 2019

Да.Я понял.Мы можем получить аргументы функции в 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".
    }
...