1

我试图在我的模块中保存一个全局变量并从另一个函数访问它。我不想将它存储在 $_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");
    }
4

3 回答 3

5

要存储全局变量,请将其存储在$GLOBALSsuperglobal 中。

或者,也许,您可以使用静态值。

$GLOBALS: http: //php.net/manual/en/reserved.variables.globals.php

static变量: http: //php.net/manual/en/language.oop5.static.php

于 2012-09-24T06:24:24.640 回答
4

如果您只需要一个地方来在相同的请求中存储您的变量,以便访问不同的函数,那么请查看drupal_static。如果您需要跨多个请求跟踪您的变量,那么 $_SESSION 就是您要查看的地方。

Mārtiņš Briedis 对 static_variables 的看法是正确的,而 drupal_static 只是形式化的实现方式。

于 2012-09-24T06:37:41.403 回答
0

popmeup_comment_insert()hook_comment_insert()的实现)在与popmeup_page(). 因此,当相关页面请求完成时,任何静态或全局变量都会自动重置。

您唯一的选择是使用 Drupal 变量,或从您的模块中使用的自定义数据库表。我会丢弃 Drupal 变量,因为它们是在 Drupal 引导期间加载的,即使没有请求它们的值来构建页面内容。在您的情况下,由于您在输出页面时需要这些值,我宁愿使用自定义数据库表。

当您使用hook_comment_insert()它来填充它时,您应该考虑不同的用户可以同时插入新评论,或者在调用您的页面回调之前。您的代码应该需要考虑这一点。如果两个不同的用户创建了一个新评论,应该在数据库中保存哪个值?

于 2013-01-02T16:24:13.013 回答