menu_execute_active_handler(), która jest funkcją Drupal, który wywołuje zwrotnego menu, zawiera następujący kod:
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;
}
}
W PHP 5.2.3 lub nowszy, jest możliwe, aby zadzwonić call_user_func()
jako call_user_func('MyClass::myCallbackMethod')
.
Jedyny problem, jaki widzę, dotyczy modułów innych firm, które nie oczekują wywołania zwrotnego z menu, które jest metodą statyczną klasy i używają function_exists($menu_callback)
.
Następnie, jak zgłosił program Coder1, jeśli moduły podstawowe Drupala lub inne moduły spróbują wywołać menu_callback za pomocą kodu podobnego do poniższego, mogą spowodować błąd PHP.
$menu_callback = $router_item['page_callback'];
$menu_callback($router_item['page_arguments']);
Byłbym zainteresowany, gdybyś go wypróbował i nie zadziałał. Odpowiedź prawdopodobnie sprowadza się do tego, że jeśli PHP obsługuje dynamiczne wywoływanie funkcji w ten sposób. $ foo = 'MyClass :: test'; $ foo(); ... Moje początkowe myśli byłyby nie, ale tak naprawdę nie próbowałem. – Coder1