drupal模块中全局变量的范围

时间:2015-03-23 17:19:03

标签: php drupal drupal-7 global-variables

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

2 个答案:

答案 0 :(得分:0)

查看说明文件:

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

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

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

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

答案 1 :(得分:0)

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

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

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