我在 cas.module 的第 245 行 drupal CAS 模块中看到了一些我不完全理解的东西:
$initialized = &drupal_static(__FUNCTION__, FALSE);
前面有参考符号的函数是怎么回事?我认为它只能与变量一起使用。有人可以给我一个简单的解释吗?这样调用函数时会发生什么,$initialized
的值是多少?
函数的返回作为引用返回。从手册:
当您想要使用函数来 查找引用应绑定到哪个变量。请勿使用 按引用返回以提高性能。发动机将 自动优化它本身。
Drupal使用该函数在单个页面加载期间缓存数据。它实际上可以以与以下相同的方式使用:
static $initialized = false;
只是,通过使用中央存储并按函数名称记录变量,其他函数能够在页面请求期间访问(对于Drupal来说更重要的是重置)该值。
Drupal如何使用它:
Jeff Eaton 在 Drupal 7 中创建了一篇关于drupal_static和其他缓存技术的精彩博客文章。
假设另一个模块想要调用你的函数,因为你已经将$initialized
设置为 true,你知道你可以从缓存中获取数据。但是,如果另一个模块不希望您缓存它怎么办?然后,它可以重置静态变量,如下所示:
$initialized = &drupal_static('your_module_your_function');
$initialized = false;
$freshData = your_module_your_function();
它可能不是最干净的模式,但这就是Drupal在许多地方的做法。
从PHP的角度来看,它的作用是:
使用此构造允许被调用的函数按引用返回其值,而不是按值返回。为此,被调用的函数也必须使用与号定义,例如:
public function &getBar() {
return $this->bar;
}
您甚至可以将其与按引用的参数组合。这样,您就可以通过函数一直传递引用,这样当您更改返回值时,也会更改原始值。例如:
function &getRef(&$x) {
return $x;
}
$a = 1;
$b = &getRef($a);
$b++;
echo $a; // Will output 2