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