zval **parameter; / * retrieve parameter * / zend_get_parameters_ex(1, parameter); / * at this stage, parameter still is connected * / / * to Zend's internal data buffers * / / * make parameter write-safe * / SEPARATE_ZVAL(parameter); / * now we can safely modify parameter * / / * without implying global changes * /
You might run into a situation in which you need write access to a parameter that's retrieved with zend_get_parameters_ex() but not passed by reference. For this case, you can use the macro SEPARATE_ZVAL, which does a zval separation on the provided container. The newly generated zval is detached from internal data and has only a local scope, meaning that it can be changed or destroyed without implying global changes in the script context: