>我正在尝试在我的模块中保存一个全局变量并从另一个函数访问它。我不想将其存储在 _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");
}
要存储全局变量,请将其存储在超全局变量$GLOBALS
。
或者,也许可以使用静态值。
$GLOBALS
: http://php.net/manual/en/reserved.variables.globals.php
static
变量:http://php.net/manual/en/language.oop5.static.php
如果您只需要有一个地方将变量存储在相同的请求中,以便访问不同的函数,那么请查看drupal_static。如果您需要跨多个请求跟踪变量,那么 $_SESSION 就是查找的地方。
Mārtiņš Briedis对static_variables是正确的,drupal_static只是正式的方式。
popmeup_comment_insert()
(hook_comment_insert()的实现)在与popmeup_page()
不同的页面请求中调用。因此,当相对页面请求完成时,任何静态或全局变量都会自动重置。
您唯一的选择是使用 Drupal 变量或模块中使用的自定义数据库表。我会丢弃 Drupal 变量,因为它们是在 Drupal 引导期间加载的,即使它们的值没有被请求来构建页面内容。在您的情况下,由于您在输出页面时需要这些值,我宁愿使用自定义数据库表。
当您使用 hook_comment_insert()
来填充它时,您应该考虑到不同的用户可以同时插入新注释,或者在调用页面回调之前插入新注释。您的代码应该需要考虑这一点。如果两个不同的用户创建新注释,则应在数据库中保存哪个值?