drupal模块中全局变量的范围


scope of a global variable in drupal module

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...
  }
}

查看文档内容:

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

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

任何一种php变量的生存期都不再是一个"页面调用"。因此,在您的下一页调用中,所有值都将丢失。

如果您想让某个值保持比单次执行更长的时间,则必须使用php会话、cookie、文件或数据库。。。。把它们存放在那里。

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

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

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