我在drupal CAS模块中看到了一些我并不完全理解的内容,245 of cas.module行:
$initialized = &drupal_static(__FUNCTION__, FALSE);
前面有参考符号的功能怎么回事?我认为它只适用于变量。有人可以给我一个简单的解释吗?这样调用函数时会发生什么,$initialized
的值是什么?
答案 0 :(得分:1)
该函数的返回值为returned as a reference。从手册:
当您想要使用函数时,通过引用返回很有用 找到应该绑定引用的变量。不使用 按引用返回以提高性能。引擎会 自动优化它。
答案 1 :(得分:1)
Drupal使用该函数在单页加载期间缓存数据。它实际上可以像以下一样使用:
static $initialized = false;
只有通过使用中央存储并按功能名称保存变量记录,其他功能才能在页面请求期间访问(对于Drupal更重要,重置)该值。
Drupal如何使用它:
Jeff Eaton在Drupal 7中创建了一个nice blog post关于 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;
}
您甚至可以将它与参数by-reference结合使用。这样,您可以通过函数一直传递引用,这样当您更改返回值时,您也可以更改原始值。例如:
function &getRef(&$x) {
return $x;
}
$a = 1;
$b = &getRef($a);
$b++;
echo $a; // Will output 2