我正在尝试在我的模块中保存一个全局变量并从另一个函数访问它。我不想将它存储在$ _SESSION中,因为我需要这个变量应用程序。以下是我正在尝试的代码,但它根本不起作用。
function popmeup_menu() {
$items['example/feed'] = array(
'title' => 'Example RSS feed',
'page callback' => 'popmeup_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
return $items;
}
function popmeup_page() {
print variable_get($xmlt, "");
}
function popmeup_comment_insert($comment) {
variable_set($xmlt,"xmltoreturn");
}
答案 0 :(得分:5)
要存储全局变量,请将其存储在$GLOBALS
superglobal。
或许,您可以使用静态值。
$GLOBALS
:http://php.net/manual/en/reserved.variables.globals.php
答案 1 :(得分:4)
如果您只需要在相同的请求中存储变量,则可以访问不同的函数,然后查看drupal_static。如果您需要在多个请求中跟踪您的变量,那么$ _SESSION就是您要查看的地方。
MārtiņšBriedis对static_variables的看法是正确的,而drupal_static只是形式化的方式。
答案 2 :(得分:0)
popmeup_comment_insert()
(hook_comment_insert()的实现)在与popmeup_page()
不同的页面请求中调用。因此,当相关页面请求完成时,任何静态或全局变量都会自动重置。
唯一的替代方法是使用Drupal变量或模块中使用的自定义数据库表。我会丢弃Drupal变量,因为它们是在Drupal引导期间加载的,即使它们的值没有被请求构建页面内容。在您的情况下,因为在输出页面时需要这些值,我宁愿使用自定义数据库表。
当您使用hook_comment_insert()
填充它时,您应该考虑不同的用户可以同时插入新的注释,或者在调用页面回调之前。您的代码应该考虑到这一点。如果两个不同的用户创建新注释,哪个值应保存在数据库中?