【问题标题】:scope of a global variable in drupal moduledrupal模块中全局变量的范围
【发布时间】:2015-03-23 17:19:03
【问题描述】:

Drupal 模块内的“全局”变量的范围是什么?我为自定义块创建了一个模块,需要知道全局保持设置多长时间,所以我知道如何使用它们。他们是停留在整个网站实例中,还是只停留在页面上一次。例如,在下面的代码中,drupal_set_message 每次加载带有块的页面时都会调用一次。我可以确定每次加载块时都会刷新“全局”变量吗?

<?php

global $my_array;

function fill_array()
{
  global $my_array;
  if(!isset($my_array))
  {
    drupal_set_message("filling the array");
    $my_array = array();
    // code to fill array up...
  }
}

【问题讨论】:

    标签: php drupal drupal-7 global-variables


    【解决方案1】:

    查看文档内容:

    http://php.net/manual/en/language.variables.scope.php

    默认情况下,全局变量可用于所有全局代码。但是如果你想在你的函数中使用它们,你必须首先将它们声明为全局。

    并且任何类型的 php 变量的生命周期都不再是一个“页面调用”。因此,在您的下一页调用中,所有值都将丢失。

    如果你想保持一些值比单次执行更长,你必须使用 php 会话或 cookie 或文件或数据库....将它们存储在那里。

    【讨论】:

    • 知道了——我在考虑像$user 这样的会话范围的全局变量,但我想这些是不同的。谢谢!
    【解决方案2】:

    我知道这是一个老问题,但范围比这更棘手。

    Drupal 使用 eval() 在函数上下文中执行 PHP 块,因此在 PHP 代码的顶层定义的变量不在全局上下文中,除非它们被显式设置为全局。

    换句话说,您的代码有三个上下文,而不是正常的两个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2012-04-29
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多