menu_execute_active_handler(), đó là chức năng Drupal mà các cuộc gọi callback menu, chứa đoạn mã sau:
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;
}
}
Trong PHP 5.2.3 hoặc cao hơn, có thể gọi call_user_func()
là call_user_func('MyClass::myCallbackMethod')
.
Vấn đề duy nhất tôi có thể thấy là với các mô-đun bên thứ ba không mong đợi một cuộc gọi lại menu là phương thức tĩnh lớp và sử dụng function_exists($menu_callback)
. Sau đó, như Coder1 đã báo cáo, nếu các mô-đun lõi Drupal hoặc các mô-đun khác, hãy thử gọi menu_callback bằng cách sử dụng mã tương tự như sau, sau đó chúng có thể gây ra lỗi PHP. Quay lại đầu trang |||||||||||||||||||||||||||||||||||||||||||
$menu_callback = $router_item['page_callback'];
$menu_callback($router_item['page_arguments']);
Tôi muốn được quan tâm nếu bạn đã thử nó và nó không hoạt động. Câu trả lời có thể là do PHP hỗ trợ gọi một hàm động như thế này. $ foo = 'MyClass :: test'; $ foo(); ... Suy nghĩ ban đầu của tôi sẽ là không, nhưng tôi đã không thực sự thử nó. – Coder1