8.6.2 Appeler des fonctions utilisateurs
Pour appeler des fonctions utilisateurs depuis une fonction interne, vous
devez utiliser la fonction call_user_function().
call_user_function() retourne SUCCESS en cas de succès, et FAILURE
en cas d'échec, ou si la fonction n'a pas été
trouvée. Vous devez vérifier cette valeur. Si la
réponse est SUCCESS, vous êtes responsable de la destruction de
retval (ou alors, retournez la comme valeur de réponse de votre
fonction). Si la réponse est FAILURE, la valeur de retval est
indéfinie, et vous ne devez pas y toucher.
Toutes les fonctions internes qui appellent une fonction utilisateur,
DOIVENT être réentrante. En
particulier, elles ne doivent pas utiliser de valeurs globales, ou
de variables statiques.
call_user_function() prend 6 arguments :
8.6.2.1 HashTable *function_table
La table de hash dans laquelle le fonction doit être recherchée.
8.6.2.2 pval *object
Un pointeur sur un objet sur lequel la fonction est invoquée.
Il devrait être à NULL, si on invoque une fonction globale.
Si il n'est pas à NULL (ie, il pointe sur un objet), l'argument
function_table est ignorée, et la liste des fonctions sera lue
dans l'objet, plutôt que dans l'argument. L'objet PEUT être
modifié par la fonction qui est appelée (la fonction y aura
accès via $this). Si, vous quelque raison, vous ne le voulez pas,
envoyez une copie de l'objet à la place.
8.6.2.3 pval *function_name
Le nom de la fonction à appeler. Elle doit être de type pval,
IS_STRING, avec les valeurs de function_name.str.val et function_name.str.len
correctes. function_name est modifié par call_user_function() -
il est converti en minuscule. Si vous voulez préserver la casse,
envoyez une copie du nom de la fonction.
8.6.2.4 pval *retval
Un pointeur sur une structure pval, dans laquelle la valeur de retour de
la fonction sera placée. La structure doit avoir été
allouée au préalable, - call_user_function() ne l'allouera pas.
8.6.2.5 int param_count
Le nombre de paramètre passé à la fonction.
8.6.2.6 pval *params[]
Un tableau de pointeur sur les valeurs qui vont être passées
comme arguments à la fonction. Le premier argument est à
l'offset 0, le second à l'offset 1,... Le tableau est un tableau
de pointeurs sur pval; Les pointeurs sont envoyés tels quels à la
fonction, ce qui signifie que si la fonction modifie les arguments, les valeurs
originales seront modifiées. Si vous voulez l'éviter, passez une
copie à la place.
|