8

我正在“剖析”PunBB,它的功能之一是检查 BBCode 标记的结构并在可能的情况下修复简单的错误:

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

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

4

4 回答 4

25

这意味着通过引用传递变量,而不是传递变量的值。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;

输出:

不变

不变

变了!

于 2010-11-14T00:22:54.360 回答
2

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

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

例如:

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

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

于 2010-11-14T00:22:30.163 回答
1

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

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

于 2010-11-14T00:21:58.930 回答
0

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

于 2010-11-14T00:25:07.147 回答