c — Передача нескольких переменных по ссылке в расширении PHP 7.3

Я пытаюсь передать несколько параметров (типа ZVAL) по ссылке в функции расширения php. Но я не получаю измененное значение. Я последовал советам из следующего поста. Передача переменной по ссылке в расширение PHP7

Но это сработало только для одного аргумента. Ниже приведен код, в котором я пытаюсь пройти 2 ZVAL

PHP_FUNCTION(sample_byref_compiletime)
{
zval *a,*b;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"z/z/", &a, &b ) == FAILURE)
{
php_printf("Error");
RETURN_NULL();
}
ZVAL_DEREF(a);
SEPARATE_ZVAL_NOREF(a);
zval_dtor(a);
ZVAL_LONG(a, 40);

ZVAL_DEREF(b);
SEPARATE_ZVAL_NOREF(b);
zval_dtor(b);
ZVAL_LONG(b, 41);
}

0

Решение

Я думаю, что вы, возможно, неправильно поняли ответ на пост, который вы указали в своем вопросе. Хотя, к вашему чести, это было немного запутанным. В ответе представлены два возможных решения:

1.) Изменить z в z/ в призыве к zend_parse_parameters()

или же

2.) Добавить звонки ZVAL_DEREF(a); а также SEPARATE_ZVAL_NOREF(a); перед переназначением zval.

Второй вариант по существу делает то, что / модификатор сделал бы, если предусмотрено в вызове zend_parse_parameters(), Как документация указывает:

Расширенные Спецификаторы Типа

спекуляция       Описание

/       SEPARATE_ZVAL_IF_NOT_REF по параметру следует

Таким образом, вы должны использовать только вариант № 1 или просто вариант № 2. Вы применили оба варианта одновременно, что означает, что разыменование происходит дважды.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]