SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Jobs :. 
 
Sommaire

Présentation des sources

Structure de module
Inclusions des fichiers d'entête
Déclarer les fonctions exportées.
Déclaration du bloc de fonctions Zend
Déclaration du bloc de module Zend
Création de get_module
Implémentation de toutes les fonctions exportées
Conclusion

7.9.4 Déclaration du bloc de fonctions Zend

Maintenant que vous avez déclaré les fonctions qui seront exportées, vous devez aussi les signaler à Zend. Cette étape se fait en utilisant un tableau de zend_function_entry. Ce tableau contient consécutivement toutes les fonctions qui doivent être disponibles de manière externe, avec le nom sous lequel elle doit apparaître en PHP, et son nom défini en C. En interne, zend_function_entry est défini comme indiqué dans <>.

Déclaration interne de zend_function_entry.

typedef struct _zend_function_entry {

    char *fname;

    void (*handler)(INTERNAL_FUNCTION_PARAMETERS);

    unsigned char *func_arg_types;

} zend_function_entry;
> >
Entrée Description
fname Définit le nom de la fonction comme il est utilisé dans PHP (par exemple, fopen, mysql_connect, et dans notre exemple, first_module).
handler Un pointeur sur la fonction C responsable de la gestion de l'appel de cette fonction. Par exemple, voyez la macro standard INTERNAL_FUNCTION_PARAMETERS présentée un peu plus tôt.
func_arg_types Cette entrée vous permet de marquer certains paramètres, de manière à ce qu'ils soient passé par référence. Vous passerez généralement la valeur NULL.
Dans l'exemple ci-dessus, la déclaration ressemble à ceci :


zend_function_entry firstmod_functions[] =

{

    ZEND_FE(first_module, NULL)

    {NULL, NULL, NULL}

};
Vous pouvez voir que la dernière entrée dans cette liste est toujours {NULL, NULL, NULL}. Ce marqueur doit être placé là pour que Zend saches reconnaître la fin de la liste de fonctions exportées.

Note

Vous ne pouvez pas  utiliser de macros prédéfinie pour créer le marqueur, car cela vous conduirait à créer une fonction de nom "NULL".

La macro ZEND_FE (surnon de 'Zend function Entry') remplace une structure élément dans zend_function_entry. Notez que ces macros introduiront une charte de nommage spéciale dans vos fonctions : vos fonctions C doivent être préfixées par zif_, ce qui signifie que ZEND_FE(first_module) fera référence à une fonction qui s'appelle zif_first_module. Si vous voulez utiliser les macros en même temps que du code écrit à la main (très mauvaise idée), gardez bien cela en tête.

Conseil : Les erreurs de compilation qui font référence aux fonctions nommées zif_* font référence à des fonctions créées avec ZEND_FE.

<> montre une liste de toutes les macros que vous pouvez utiliser pour définir des fonctions :

Macros de définitions de fonctions

> >
Nom de la macro Description
ZEND_FE(name, arg_types) Définit une fonction de nom name dans le tableau zend_function_entry. Requiert une fonction identique en C. arg_types doit valoir NULL. Cette fonction utilise une technique de nommage automatique en C pour générer le nom de la fonction en préfixant ce nom avec zif_. Par exemple, ZEND_FE("first_module", NULL) introduit une nouvelle fonction first_module dans PHP, et la relie avec la fonction C zif_first_module. Utilisez la en conjonction avec ZEND_FUNCTION.
ZEND_NAMED_FE(php_name, name, arg_types) Définit une fonction qui sera disponible en PHP avec le nom php_name et reliée à la fonction C de nom name. arg_types doit être mis à NULL. Utilisez cette fonction si vous ne voulez pas du préfixage automatique introduit par ZEND_FE. Utilisez la en conjonction avec ZEND_NAMED_FUNCTION.
ZEND_FALIAS(name, alias, arg_types) Définit un alias alias pour la fonction name. arg_types doit être mis à NULL. Cette macro n'a pas besoin de fonction C correspondante. Elle fait référence à la fonction alias pour cela.
PHP_FE(name, arg_types) Ancien équivalent PHP de ZEND_FE.
PHP_NAMED_FE(runtime_name, name, arg_types) Ancien équivalent PHP de ZEND_NAMED_FE.

Note:  Vous ne pouvez pas utiliser ZEND_FE en conjonction avec PHP_FUNCTION, ou PHP_FE en conjonction avec ZEND_FUNCTION. Cependant, il est parfaitement vlaide de mélanger ZEND_FE et ZEND_FUNCTION avec PHP_FE et PHP_FUNCTION lorsque vous utilisez le même jeu de macros pour chaque fonction à déclarer. Mais le mélange des deux n'est pas  recommandé; à la place, nous vous recommandons d'utiliser les macros ZEND_* à la place.


Chapitre précédentChapitre suivantAccueil nexen.net