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().
|
|