Assuring Write Safety for Other Parameters
    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:
    
| zval **parameter;
     
/* retrieve parameter */
zend_get_parameters_ex(1, ¶meter);
/* 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 */ | 
    SEPARATE_ZVAL uses 
emalloc()
    to allocate the new 
zval container, which means that even if you
    don't deallocate this memory yourself, it will be destroyed automatically upon
    script termination. However, doing a lot of calls to this macro
    without freeing the resulting containers will clutter up your RAM.
   
    Note: As you can easily work around the lack
    of write access in the "traditional" API (with
    zend_get_parameters() and so on), this API
    seems to be obsolete, and is not discussed further in this
    chapter.