Services webmasters
Partenaires
Jeux concours gratuits
 
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.


ZEND_API int call_user_function_ex(HashTable *function_table, zval *object,
zval *function_name, zval **retval_ptr_ptr,
int param_count, zval **params[],
int no_separation);

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.


<?php

dl
("call_userland.so");

function
test_function()
{

    print(
"Nous sommes dans la fonction de test!<br>");

    return(
"bonjour");

}

$return_value = call_userland("test_function");

print(
"Valeur retournée : \"$return_value\"<br>");
?>

Sommaire :

<< Appeler des fonctions utilisateurs >>
Fonctions de démarrage et d'extinction Développer PHP 4.0 Support du fichier d'initialisation File Support
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -