Re: Translating optional zval ** with zend_parse_parameters() to PHP 7
| From: | Kalle Sommer Nielsen | Date: | Fri, 25 Nov 2016 07:27:24 +0000 |
| Subject: | Re: Translating optional zval ** with zend_parse_parameters() to PHP 7 | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-97170@lists.php.net to get a copy of this message | ||
Hi Thomas
2016-11-25 4:13 GMT+01:00 Thomas Hruska <thruska@cubiclesoft.com>:
> I'm working on updating an extension for PHP 7 compatibility. I have one
> function that uses an optional zval ** with zend_parse_parameters().
>
> zval **zprevcount = NULL;
> int count;
> int argc = ZEND_NUM_ARGS();
>
> if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|Z",
> &zprevcount) == FAILURE) return;
>
> ...
>
> if (argc > 0)
> {
> count = (int)PrevCount;
>
> zval_dtor(*zprevcount);
> ZVAL_LONG(*zprevcount, count);
> }
>
> What's the correct way to translate that into PHP 7?
Since you are working with integers, you can do:
zend_long prevcount = 0;
if(zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &prevcount) == FAILURE)
{
return;
}
if(prevcount)
{
/* ... use prevcount ... */
}
Notice that all integers returned from the ZPP is a zend_long, you can
see more information about the ZPP in
php-src/README.PARAMETER_PARSING_API
--
regards,
Kalle Sommer Nielsen
kalle@php.net