menu_execute_active_handler(), que es la función de Drupal que llama a la devolución de llamada del menú, contiene el siguiente código:
if ($router_item = menu_get_item($path)) {
if ($router_item['access']) {
if ($router_item['file']) {
require_once($router_item['file']);
}
return call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);
}
else {
return MENU_ACCESS_DENIED;
}
}
En PHP 5.2.3 o superior, es posible llamar call_user_func()
como call_user_func('MyClass::myCallbackMethod')
.
El único problema que puedo ver es con los módulos de terceros que no esperan una devolución de llamada de menú es un método estático de clase, y usa function_exists($menu_callback)
.
Entonces, como informó Coder1, si los módulos del núcleo de Drupal, u otros módulos, tratan de llamar a la menu_callback utilizando el código similar al siguiente, entonces podrían causar un error de PHP.
$menu_callback = $router_item['page_callback'];
$menu_callback($router_item['page_arguments']);
Me interesaría si lo has probado y no funcionó. La respuesta probablemente se reduce a si PHP admite llamar a una función de forma dinámica como esta. $ foo = 'MyClass :: prueba'; $ foo(); ... Mis pensamientos iniciales serían no, pero en realidad no lo he intentado. – Coder1