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...
}
}
答案 0 :(得分:0)
查看说明文件:
http://php.net/manual/en/language.variables.scope.php
默认情况下,全局变量可用于所有全局代码。但是如果你想在你的功能中使用它们,你必须首先将它们声明为全局。
任何类型的php变量的生命周期都不再是一个“页面调用”。因此,在下一页调用时,所有值都将丢失。
如果你想保留一些值比单次执行更长,你必须使用php会话或cookie或文件或数据库....将它们存储在那里。
答案 1 :(得分:0)
我知道这是一个老问题,但范围比这更棘手。
Drupal 使用 eval() 在函数上下文中执行 PHP 块,因此在 PHP 代码中顶层定义的变量不在全局上下文中,除非它们明确设置为全局。
换句话说,您的代码具有三个上下文,而不是通常的两个。