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.3 Déclarer les fonctions exportées.

Pour déclarer les fonctions qui seront exportées (c'est à dire disponibles comme nouvelles fonctions natives de PHP), Zend fournit un jeu de macros. Une simple déclaration comme ceci :


ZEND_FUNCTION ( my_function );

ZEND_FUNCTION déclare une nouvelle fonction C qui s'interface bien avec les API internes de Zend. Cela signifie que cette fonction est de type void et qu'elle accepte INTERNAL_FUNCTION_PARAMETERS (une autre macro) comme param;tres. De plus, la macro préfixe le nom de la fonction avec zif. La version complète de la macro ci-dessus est le code suivant :


void zif_my_function ( INTERNAL_FUNCTION_PARAMETERS );
Le détail de INTERNAL_FUNCTION_PARAMETERS est le suivant :

void zif_my_function( int ht

                    , zval * return_value

                    , zval * this_ptr

                    , int return_value_used

                    , zend_executor_globals * executor_globals

                    );

Comme l'interpréteur et l'exécutuer ont été séparé de PHP, un second jeu d'API définissant les jeux de macros et fonction a évolué : l'API Zend. Comme l'API Zend gère un bon nombre de responsabilités qui étaient gérées par PHP avant, un bon nombre de macros de PHP ont été réduite à des macros, qui reprennent celle de Zend. Il est recommandé d'utiliser les macros de Zend à chaque fois que c'est possible de le faire, car l'ancienne API n'est conservée que par compatibilité ascendante. Par exemple, les types zval et pval sont identiques. zval est la définition de Zend; pval est la définition de PHP (en fait, pval est un alias de zval, maintenant). Comme la macro INTERNAL_FUNCTION_PARAMETERS est une macro Zend, la déclaration ci-dessus contient un zval. Lorsque vous écrivez du code, pensez à toujours utiliser zval pour être conforme avec la nouvelle API Zend.

La liste de paramètres de cette déclaration est très importante; Nous vous recommandons de garder ces paramètres en tête (voir <> pour plus d'informations). Paramètres Zend des fonctions appelées depuis PHP

> >
Paramètre Description
ht Le nombre d'arguments passés à la fonction Zend. Ne touchez pas à cette valeur directement, mais plutôt avec la macro ZEND_NUM_ARGS pour en connaître la valeur.
return_value Cette variable est utilisée pour passer la valeur de retour de votre fonction à PHP. Les meilleurs accès à cette variables sont faits avec des macros prédéfinis. Pour une description de ces macros, voir plus bas.
this_ptr En utilisant cette variable, vous pouvez accéder à l'objet qui contient la fonction courante, si elle est une méthode de classe. Utilisez la fonction getthis pour obtenir ce pointeur.
return_value_used Ce flag indique si une valeur éventuelle de retour de cette fonction sera utilisée par le script. 0 indique que la valeur de retour ne sera pas utilisée. 1 indique que la fonction appelante utilisera la valeur de retour. L'évaluation de ce flag peut être faite pour vérifier l'utilisation correcte de votre fonction, ou bien de réaliser des optimisations de vitesse si la lecture de la valeur de retour demandent beaucoup d'efforts, mais n'est pas utilisée (pour un exemple, voyez comment array.c utilise ceci).
executor_globals Cette variable pointe sur la configuration globale du Zend Engine. Vous aurez à utiliser ceci lorsque vous voudrez créer de nouvelles variables, par exemple (voir plus tard pour un exemple). Les globales de l'exécuteur peuvent aussi être accessible à votre fonction en utilisant la macro TSRMLS_FETCH().


Chapitre précédentChapitre suivantAccueil nexen.net