8.9 Gestion des arguments
8 Développer PHP 4.0
Manuel PHP
. Déterminer le nombre d'arguments . Lire les arguments . Ancienen méthode de lecture des arguments (obsolète) ->Traitement des nombres d'arguments variables et des paramètres optionnels . Accéder aux arguments . Traiter les arguments passés par référence . Assurer les autres paramètres contre l'écriture
|
8.9.4 Traitement des nombres d'arguments variables et des paramètres optionnels
Si votre fonction doit accepter un nombre variable d'arguments, les
exemples de code ci-dessus sont parfois sous-optimuax. Vous devez créer une
ligne appelant
zend_get_parameters_ex
pour chaque
nombre d'arguments possible, ce qui est souvent frustrant.
Dans ce cas, vous pouvez utiliser la fonction
zend_get_parameters_array_ex
, qui accepte le nombre
d'arguments en paramèters, et un tableau dans lequel les stocker.
zval **parameter_array[4];
/* lit le nombre de paramètres passés */ argument_count = ZEND_NUM_ARGS();
/* vérification du nombre minimal d'arguments (2 arguments) */ /* et du nombre maximal d'arguments (4 arguments) */ if(argument_count < 2 || argument_count > 5) WRONG_PARAM_COUNT;
/* Le nombre d'arguments est valide, nous pouvons les lire */ if(zend_get_parameters_array_ex(argument_count, parameter_array) != SUCCESS) WRONG_PARAM_COUNT;
Tout d'abord, le nombre d'arguments est testé pour s'assurer qu'il est valide. Après
cela,
zend_get_parameters_array_ex
est appelée pour remplir
la variable
parameter_array
avec un pointeur valide vers les valeurs
des arguments.
Une utilisation très habile de cette technique est accessible dans
le code de
fsockopen
, dans le fichier
ext/standard/fsock.c
, disponible dans
Implémentation en PHP du nombre variable d'arguments avec fsockopen(). . Ne paniquez pas si vous ne connaissez pas
toutes les focntions dans ce source : nous y viendrons progressivement.
fsockopen
accepte deux, trois, quatre ou cinq
paramètres. Après la déclaration obligatoire des variables,
la fonction vérifie que le nombre d'argument est valide. Puis, il
utilise le mécanisme de 'fall through' du
switch()
pour traiter ces arguments.
switch()
commence avec le nombre maximal d'arguments, c'est à dire cinq. Puis,
il traite le cas de quatres arguments passés, puis de trois, en omettant
simplement d'utiliser
break
. Une fois que tous les
cas sont passés en revue,
switch()
est terminé, et
il traite le nombre minimum d'arguments avec lequel la fonction doit être
invoquée, c'est à dire deux.
Ce type de traitement a plusieurs étages, similaire à un escalier,
permet de gérer proprement et facilement les fonctions à nombre
d'arguments variables.
|