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 :

HashTable *function_table

La table de hash dans laquelle le fonction doit être recherchée .

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 .

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 .

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 .

int param_count

Le nombre de paramètre passé à la fonction .

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 .