Appeler des fonctions utilisateurs
Pour
appeler
des
fonctions
utilisateurs
depuis
une
fonction
interne
,
vous
devez
utiliser
la
fonction
call_user_function(
)
.
call_user_function(
)
retourne
SUCCESS
en
cas
de
succès
,
et
FAILURE
en
cas
d'échec
,
ou
si
la
fonction
n
'a
pas
été
trouvée
.
Vous
devez
vérifier
cette
valeur
.
Si
la
réponse
est
SUCCESS
,
vous
êtes
responsable
de
la
destruction
de
retval
(
ou
alors
,
retournez
la
comme
valeur
de
réponse
de
votre
fonction
)
.
Si
la
réponse
est
FAILURE
,
la
valeur
de
retval
est
indéfinie
,
et
vous
ne
devez
pas
y
toucher
.
Toutes
les
fonctions
internes
qui
appellent
une
fonction
utilisateur
,
DOIVENT
être
réentrante
.
En
particulier
,
elles
ne
doivent
pas
utiliser
de
valeurs
globales
,
ou
de
variables
statiques
.
call_user_function(
)
prend
6
arguments
:
HashTable *function_table
La
table
de
hash
dans
laquelle
le
fonction
doit
être
recherchée
.
pval *object
Un
pointeur
sur
un
objet
sur
lequel
la
fonction
est
invoquée
.
Il
devrait
être
à
NULL
,
si
on
invoque
une
fonction
globale
.
Si
il
n'
est
pas
à
NULL
(ie
,
il
pointe
sur
un
objet)
,
l'argument
function_table
est
ignorée
,
et
la
liste
des
fonctions
sera
lue
dans
l'objet
,
plutôt
que
dans
l
'argument
.
L'
objet
PEUT
être
modifié
par
la
fonction
qui
est
appelée
(la
fonction
y
aura
accès
via
$this
)
.
Si
,
vous
quelque
raison
,
vous
ne
le
voulez
pas
,
envoyez
une
copie
de
l
'
objet
à
la
place
.
pval *function_name
Le
nom
de
la
fonction
à
appeler
.
Elle
doit
être
de
type
pval
,
IS_STRING
,
avec
les
valeurs
de
function_name.str.val
et
function_name.str.len
correctes
.
function_name
est
modifié
par
call_user_function(
)
-
il
est
converti
en
minuscule
.
Si
vous
voulez
préserver
la
casse
,
envoyez
une
copie
du
nom
de
la
fonction
.
pval *retval
Un
pointeur
sur
une
structure
pval
,
dans
laquelle
la
valeur
de
retour
de
la
fonction
sera
placée
.
La
structure
doit
avoir
été
allouée
au
préalable
,
-
call_user_function(
)
ne
l
'allouera
pas
.
int param_count
Le
nombre
de
paramètre
passé
à
la
fonction
.
pval *params[]
Un
tableau
de
pointeur
sur
les
valeurs
qui
vont
être
passées
comme
arguments
à
la
fonction
.
Le
premier
argument
est
à
l'
offset
0
,
le
second
à
l
'offset
1,..
.
Le
tableau
est
un
tableau
de
pointeurs
sur
pval
;
Les
pointeurs
sont
envoyés
tels
quels
à
la
fonction
,
ce
qui
signifie
que
si
la
fonction
modifie
les
arguments
,
les
valeurs
originales
seront
modifiées
.
Si
vous
voulez
l
'
éviter
,
passez
une
copie
à
la
place
.