menu_execute_active_handler () , которая является функцией Drupal, которая вызывает обратный вызов меню, содержит следующий код:
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;
}
}
В PHP 5.2.3 или выше можно назвать call_user_func()
как call_user_func('MyClass::myCallbackMethod')
.
Единственная проблема, которую я вижу, - это модули сторонних производителей, которые не ожидают, что обратный вызов меню - это статический метод класса, и используют function_exists($menu_callback)
.
Затем, как сообщил Coder1, если основные модули Drupal или другие модули попытаются вызвать menu_callback, используя код, подобный следующему, тогда они могут вызвать ошибку PHP.
$menu_callback = $router_item['page_callback'];
$menu_callback($router_item['page_arguments']);