Fonctions de démarrage et d'extinction <<< |
Appeler des fonctions utilisateurs | Support du fichier d'initialisation File Support >>> |
8 Développer PHP 4.0 Manuel PHP . Introduction . Possibilités d'extension . Source Layout . Le système de squelette automatique de PHP . Créer une extension . Utiliser des extensions . Résolution de problèmes . Présentation des sources . Gestion des arguments . Créer des variables . Duplique le contenu d'une variable : le bâtisseur de copie. . Retourner des valeurs . Afficher des informations . Fonctions de démarrage et d'extinction ->Appeler des fonctions utilisateurs . Support du fichier d'initialisation File Support . Par oł continuer? . Référence : quelques macros de configuration . API Macros |
8.15 Appeler des fonctions utilisateurs
Vous pouvez appeler des fonctions définis par l'utilisateur dans son script PHP (dites fonctions utilisateurs). C'est très pratique lorsque vous implémentez des fonctions de callback; par exemple, dans les cas de fonctions qui traitent les tableaux. Une fonction utilisateur peut être appelée avec la fonction call_user_function_ex . Cette fonction nécessite une valeur de hash pour la table de fonctions que vous voulez utiliser, un pointeur vers un objet (si vous voulez en appeler une méthode), le nom de la fonction, une valeur de retour, un nombre d'arguments, un tableau d'arguments, et une option qui indique si vous souhaitez faire une séparation zval.
Notez que vous n'avez qu'à spécifier l'un des deux arguments function_table et object ; l'un ou l'autre feront l'affaire. Si vous voulez appeler une méthode, vous devez fournir un objet qui contient cette méthode, auquel cas, call_user_function va automatiquement utiliser la table de fonctions de l'objet. Sinon, vous n'avez qu'a spécifier function_table . Dans ce cas, passez la valeur NULL au paramètre object . Généralement, la table de fonctions est la table principale (dite "root"), qui contient la liste de toutes les fonctions définies. Cette table de fonctions fait partie des variables globales du compilateur, et peut être utilisée via la macro CG . Pour accéder aux variables globales du compilateur, appelez la macro TSRMLS_FETCH une fois. Le nom de la fonction est spécifié grâce à une enveloppe zval . Cela peut être un peut suprenant au premier abord, mais c'est une étape logique car la plus part du temps, vous acceptez des noms de fonctions comme paramètre, issue du script appelant. Ainsi, comme vous recevez les noms de fonctions sous forme d'enveloppe zval, il vous suffit de le passer directement en argument à cette fonction. Le type de cette enveloppe zval doit être IS_STRING . L'argument suivant est constitué d'un pointeur sur la valeur de retour. Vous n'avez pas à allouer la mémoire pour cette enveloppe : la fonction le fera pour vous. Cependant, vous devrez détruire cette enveloppe (avec la fonction zval_dtor ) après l'exécution! Le paramètre suivant est le nombre de paramètre (un entier), puis le tableau contenant les paramètres nécessaires. Le dernier argument spécifie si la fonction doit effectuer une séparation zval : il est recommandé d'utiliser la valeur 0 . Si vous utilisez la valeur de 1 , la fonction va consommer moins de mémoire, mais échouera si l'un des paramètres a besoin d'une séparation zval. Appeler des fonctions définies par l'utilisateur. ilustre l'appel d'une fonction utilisateur. Le code appelle une fonction dont le nom est fournie par l'argument, et retourne le résultat de cette fonction directement. Notez que l'utilisation du constructeur et du destructeur à la fin : ce n'est pas nécessairement la solution ici (car les valeurs devraient être séparées, et l'assignation est blindée), mais c'est une solution techniquement sure.
![]() Sommaire : |
<< | Appeler des fonctions utilisateurs | >> |
Fonctions de démarrage et d'extinction | Développer PHP 4.0 | Support du fichier d'initialisation File Support |