什么和&标志在变量前面意味着什么?

时间:2010-11-14 00:20:16

标签: php punbb

我正在'解剖'PunBB,它的一个功能检查BBCode标签的结构并尽可能修复简单的错误:

function preparse_tags($text, &$errors, $is_signature = false)

&变量前面的$error是什么意思?

4 个答案:

答案 0 :(得分:22)

这意味着pass the variable by reference,而不是传递变量的值。这意味着当程序流返回到调用代码时,preparse_tags函数中对该参数的任何更改都会保留。

function passByReference(&$test) {
    $test = "Changed!";
}

function passByValue($test) {
    $test = "a change here will not affect the original variable";
}

$test = 'Unchanged';
echo $test . PHP_EOL;

passByValue($test);
echo $test . PHP_EOL;

passByReference($test);
echo $test . PHP_EOL;

输出:

  

不变

     

不变

     

更改!

答案 1 :(得分:2)

它通过引用传递而不是通过值传递。

这允许函数在调用函数的范围内更改其自身范围之外的变量。

例如:

function addOne( &$val ) {
    $val++;
}
$a = 1;
addOne($a);
echo $a; // Will echo '2'.

preparse_tags函数的情况下,它允许函数返回已解析的标记,但允许调用父级获取任何错误,而不必检查返回值的格式/类型。

答案 2 :(得分:1)

它接受对变量的引用作为参数。

这意味着函数对参数所做的任何更改(例如$errors = "Error!")都会影响调用函数传递的变量。

答案 3 :(得分:0)

这意味着在被调用的函数中将修改在错误位置传递的变量。有关详细信息,请参阅this