I'm 'dissecting' PunBB, and one of its functions checks the structure of BBCode tags and fix simple mistakes where possible:
function preparse_tags($text, &$errors, $is_signature = false)
What does the & in front of the $error variable mean?
これは、変数の値を渡すのではなく、参照によって変数を渡すことを意味します。これは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!") に対して行った変更は、呼び出し元の関数によって渡される変数に影響することを意味します。
これは、エラーの位置に渡された変数が、呼び出された関数によって変更されることを意味します。詳細な外観については、これを参照してください。