Передача переменной по ссылке в расширение PHP7

Я выполнил шаги, упомянутые в разделе " Передача переменной по ссылке в расширение PHP", для передачи переменной по ссылке в расширение PHP. Это работает нормально для PHP 5, но когда я пытаюсь сделать то же самое в Php7, и он не работает. Какие-либо предложения? Вот мой фрагмент кода.

ZEND_BEGIN_ARG_INFO(params_ref_arg_arginfo, 0) 
  ZEND_ARG_INFO(1, a)
ZEND_END_ARG_INFO()

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

  PHP_FE(sample_byref_compiletime, params_ref_arg_arginfo)

Спасибо вам за помощь.

1 ответ

Решение

Измените с "z" на "z/". Подробности смотрите в https://wiki.php.net/phpng-upgrading. Возможные спецификаторы типов http://php.net/manual/en/internals2.funcs.php.

Также вы можете изменить свой код на:

PHP_FUNCTION(sample_byref_compiletime)
{
    zval *a;     
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
        "z", &a ) == FAILURE)
    {
        php_printf("Error");
        RETURN_NULL();
    }
    ZVAL_DEREF(a);
    SEPARATE_ZVAL_NOREF(a);
    zval_dtor(a);   
    ZVAL_LONG(a, 40);
}
Другие вопросы по тегам