Sommaire
Gestion des arguments
Compter le nombre d'arguments
Lecture des arguments
L'ancienne technique de lecture des arguments (obsolète)
Cas des nombres variables de paramètres et des arguments optionnels
Accéder aux arguments
Cas des arguments passés par référence
Assurer la protection en écriture des autres paramètres
|
7.10.7 Assurer la protection en écriture des autres paramètres
Vous pouvez être dans une situation où vous aurez besoin d'accès en
écriture à un paramètre qui n'a pas étét lu avec la fonction
zend_get_parameters_ex, mais qui est passé par
référence. Dans ce cas, vous pouvez utiliser la macro
SEPARATE_ZVAL, qui effectue une séparation de zval
avec l'enveloppe passée en argument. La nouvelle valeur zval
générée est détachée des données internes, et a un espace de validité
limité à la fonction, ce qui signifie qu'elle peut être modifiée ou
détruite sans avoir de conséquence au niveau global.
zval **parameter; /* lire le paramètre */ zend_get_parameters_ex(1, ¶meter); /* a ce niveau, <parameter> est toujours connecté */ /* aux données internes de Zend */ /* rend <parameter> accessible en écriture */ SEPARATE_ZVAL(parameter); /* désormais, nous pouvons modifier <parameter> en toute sécurité */ /* sans impliquer de moifications globales */
SEPARATE_ZVAL utilise emalloc
pour allouer de nouvelles enveloppe zval, ce qui signifie
que même si vous ne désallouer pas la mémoire elle-même, elle sera automatiquement
détruite à la fin du script. Toutes fois, faire de nombreux appels
à cette macro sans libérer les résultats intermédiaire risque de
consommer toute votre mémoire.
Note: comme vous pouvez facilement contourner
ce problème avec les API traditionnelles (avec
zend_get_parameters etc...), cette API
est obsolète, et ne sera pas discuté ultérieurement.
|