Manuel PHP
Précédent | Chapitre 33. Accepting Arguments | Suivant

# 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, &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 */

`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.

Précédent | Sommaire | Suivant
Dealing with Arguments Passed by Reference | Niveau supérieur | Creating Variables