Llamando a Funciones del Usuario
Para
llamar
a
funciones
del
usuario
desde
una
función
interna
,
deberá
usar
la
función
call_user_function(
)
.
call_user_function(
)
devuelve
SUCCESS
si
tiene
éxito
y
FAILURE
en
caso
de
que
la
función
no
sea
hallada
.
¡Deberá
comprobar
ese
valor
de
retorno
!
Si
devuelve
SUCCESS
,
debe
usted
ocuparse
de
destruir
el
pval
devuelto
(
o
devolverlo
como
el
valor
de
retorno
de
su
función
)
.
Si
devuelve
FAILURE
,
el
valor
de
valret
no
está
definido
y
no
debe
tocarlo
.
Todas
las
funciones
internas
que
llaman
a
funciones
de
usuario
deben
ser
reentrantes
.
Entre
otras
cosas
,
esto
quiere
decir
que
no
se
utilicen
variables
globales
ni
estáticas
.
call_user_function(
)
lleva
6
argumentos
:
HashTable *tabla_funciones
Esta
es
la
matriz
asociativa
en
la
que
se
buscará
la
función
.
pval *objeto
Este
es
un
puntero
a
un
objeto
sobre
el
que
se
invoca
la
función
.
Deberá
valer
NULL
si
se
llama
a
una
función
global
.
Si
no
es
NULL
(
es
decir
,
si
apunta
a
un
objeto
)
,
el
argumento
tabla_funciones
se
ignora
y
se
toma
su
valor
a
partir
de
la
codificación
del
objeto
.
El
objeto
*puede*
ser
modificado
por
dicha
función
(
ésta
accede
a
él
a
través
de
$this
)
.
Si
por
alguna
razón
no
desea
que
eso
ocurra
,
envíe
entonces
una
copia
del
objeto
.
pval *nombre_func
El
nombre
de
la
función
a
llamar
.
Debe
ser
un
pval
de
tipo
IS_STRING
,
con
nombre_func.str.val
y
nombre_func.str.len
fijados
a
los
valores
apropiados
.
El
nombre_func
es
modificado
por
call_user_function(
)
,
que
lo
convierte
a
minúsculas
.
Si
necesita
preservar
el
nombre
,
envíe
una
copia
del
mismo
.
pval *valret
Un
puntero
a
una
estructura
pval
,
en
la
que
se
guarda
el
valor
de
returno
de
la
función
.
Hay
que
asignar
espacio
a
la
estructura
previamente
,
porque
la
función
call_user_function(
)
NO
lo
asigna
por
sí
misma
.
int num_params
El
número
de
parámetros
que
se
pasan
a
la
función
.
pval *params[]
Una
matriz
de
punteros
a
los
valores
que
se
pasarán
como
argumentos
a
la
función
.
El
primer
argumento
está
en
el
elemento
0
,
el
segundo
en
el
elemento
1
,
etc
.
La
matriz
es
una
matriz
de
punteros
a
pval
.
Los
punteros
se
envían
tal
cual
a
la
función
,
lo
que
quiere
decir
que
si
la
función
modifica
sus
argumentos
,
se
modifican
los
valores
originales
(
paso
por
referencia
)
.
Si
no
desea
ese
comportamiento
,
pase
una
copia
.