我正在“剖析”PunBB,它的功能之一是检查 BBCode 标记的结构并在可能的情况下修复简单的错误:
function preparse_tags($text, &$errors, $is_signature = false)
变量&
前面的是什么意思?$error
这意味着通过引用传递变量,而不是传递变量的值。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;
输出:
不变
不变
变了!
它确实通过引用而不是通过值传递。
这允许函数在调用函数的范围内更改其自身范围之外的变量。
例如:
function addOne( &$val ) {
$val++;
}
$a = 1;
addOne($a);
echo $a; // Will echo '2'.
在preparse_tags
函数的情况下,它允许函数返回已解析的标签,但允许调用父级获取任何错误,而无需检查返回值的格式/类型。
它接受对变量的引用作为参数。
这意味着函数对参数(例如,$errors = "Error!"
)所做的任何更改都会影响调用函数传递的变量。
这意味着在错误位置传递的变量将被调用函数修改。有关详细信息,请参阅此内容。