Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数调用按引用传递?_Php_Drupal 7_Pass By Reference - Fatal编程技术网

Php 函数调用按引用传递?

Php 函数调用按引用传递?,php,drupal-7,pass-by-reference,Php,Drupal 7,Pass By Reference,我在drupal CAS模块中看到了一些我不完全理解的东西,行: 函数前面有参考符号是怎么回事?我认为它只能处理变量。有人能给我一个简单的解释吗?因此调用函数时会发生什么,以及$initialized的值是多少?函数返回的值是多少。从手册中: 当您希望使用函数来 查找引用应绑定到哪个变量。不要使用 通过引用返回以提高性能。发动机将启动 自动优化它自己 Drupal使用该函数在单页加载期间缓存数据。它的实际使用方法与以下相同: static $initialized = false; 只有通过使

我在drupal CAS模块中看到了一些我不完全理解的东西,行:


函数前面有参考符号是怎么回事?我认为它只能处理变量。有人能给我一个简单的解释吗?因此调用函数时会发生什么,以及
$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