Para llamar funciones de usuario desde una función interna,
debe usar la función
call_user_function().
call_user_function() devuelve SUCCESS en caso de
éxito, y FAILURE si la función no pudo ser
encontrada. ¡Debe chequear ese valor de retorno! Si devuelve
SUCCESS, usted es responsable por la destrucción del valor
tipo pval retval (o devolverlo como el valor de retorno de su
función). Si devuelve FAILURE, el valor de retval
será indefinido, y no debe tocarlo.
Todas las funciones internas que hacen llamados a funciones de
usuario deben ser reentrantes. Entre otras
cosas, esto quiere decir que no debe usar variables globales o
estáticas.
call_user_function() recibe seis argumentos:
Esta es la tabla asociativa en la que será buscada la
función.
Este es un apuntador a un objeto sobre el que es invocada la
función. Debe ser NULL si es llamada una función
global. Si no es NULL (es decir, apunta hacia un objeto), el
argumento tabla_de_funciones es ignorado, y en su lugar se toma de
la matriz asociativa del objeto. El objeto *puede* ser modificado
por la función que es invocada sobre él (la
función tendrá acceso sobre el objeto mediante
$this). Si por alguna razón no desea que eso ocurra,
envÃe en su lugar una copia del objeto.
El nombre de la función a llamar. Debe ser un pval de tipo
IS_STRING cuyos miembros function_name.str.val y
function_name.str.len se encuentren definidos con valores
apropiados. El nombre_funcion es modificado por
call_user_function() - es convertido a minúsculas. Si
necesita conservar los caracteres originales, envÃe una
copia del nombre de función en su lugar.
Un apuntador a una estructura pval, en la cual es guardado el
valor de retorno de la función invocada. La estructura debe
ser reservada previamente -
call_user_function() NO reserva memoria por
sà sola.
El número de parámetros que son pasados a la
función.
Una matriz de apuntadores a valores que serán pasados como
argumentos a la función, el primer argumento ubicado en la
posición 0, el segundo en la posición 1, etc. La
matriz es una matriz de apuntadores a valores pval; Los
apuntadores son enviados tal cual a la función, lo que
quiere decir que si la función modifica sus argumentos, los
valores originales son modificados (pasados por referencia). Si no
desea esta clase de comportamiento, pase una copia en su lugar.