Yo el otro día estuve peleando con el mismo problema, por eso lo tengo fresco en la cabeza.
Te debería funcionar igual, el include esté dentro o fuera de la función.
El manual de PHP lo deja claro,
"Cuando se incluye un archivo, el código que contiene hereda el ámbito de las variables de la línea en la cual ocurre la inclusión. Cualquier variable disponible en esa línea del archivo que hace el llamado, estará disponible en el archivo llamado, desde ese punto en adelante. Sin embargo,
todas las funciones y clases definidas en el archivo incluido tienen el ámbito global.".
Yo acabo de probar este ejemplo (que tiene cosas de Smarty, que no importan):
Código PHP:
Ver originalrequire_once("xajax/xajax_core/xajax.inc.php");
include "funciones.php";
$xajax = new xajax();
$xajax->configure('javascript URI','xajax/');
require "../smarty/libs/Smarty.class.php";
$smarty = new Smarty;
$smarty->template_dir = "../smarty/templates";
$smarty->compile_dir = "../smarty/templates_c";
$xajax->register(XAJAX_FUNCTION,"test");
//Load the xajax js into a Smarty variable
$smarty->assign("xajax_javascript",$xajax->getJavascript()); //Note: use get not print...
$xajax->processRequest();
//Simple xajax registered function
function test()
{
$resp=new xajaxResponse();
$resp->alert("RESPUESTA:".suma());
return $resp;
}
Y el archivo funciones.php que llamo solo tiene una función llamada suma que devuelve un número nada mas.
A mí me funciona bien, yo hago click en el vínculo (que está en el template de Smarty) y XAJAX llama a xajax_test() y test() llama a suma(), suma devuelve un número y test() lo envía a xajax.
Lo que me ha pasado es que llamo al enlace de MySQL ($enlace = mysql_connect...) que está en otro archivo PHP, desde la función y ahí no funciona porque "el código que contiene hereda el ámbito de las variables" debo antes declarar como global en la función a $enlace.
Código PHP:
Ver originalfunction loca()
{
global $enlace; //Declaro que $enlace es la variable $enlace que esta fuera de la función
//Ahora puedo usar $enlace como si fue declarada dentro de la funcion
return $enlce;
}