php > $a = ["k" => []];
php > $f = function & (&$x) { return $x['k']; };
php > $b = &$f($a);
php > var_dump($a);
array(1) {
["k"]=>
&array(0) {
}
}

こうすれば 参照で渡して参照で受け取れる
$b の配列に値を追加すると $a['k'] も書き換わる状態

● 関数定義の 「function」 の後
● 引数の変数名の前
● 関数呼び出しの関数名の前

の 3 つ & が必要
どれかに & がないが場合は参照が $b に入らない

関数定義に & がないと参照を返さない
関数呼び出しに & をつけて参照を代入しようとすると Notice
php > $a = ["k" => []];
php > $f = function (&$x) { return $x['k']; };
php > $b = &$f($a);
PHP Notice: Only variables should be assigned by reference in php shell code on line 1

Notice: Only variables should be assigned by reference in php shell code on line 1
php > var_dump($a);
array(1) {
["k"]=>
array(0) {
}
}

引数に & がないと引数はコピーされたもの
参照を返して $b に代入しても $a は変わらない
php > $a = ["k" => []];
php > $f = function & ($x) { return $x['k']; };
php > $b = &$f($a);
php > var_dump($a);
array(1) {
["k"]=>
array(0) {
}
}

呼び出しに & がないと代入時に参照の代入にならない
関数は参照を返していても $b は参照じゃない
php > $a = ["k" => []];
php > $f = function & ($x) { return $x['k']; };
php > $b = $f($a);
php > var_dump($a);
array(1) {
["k"]=>
array(0) {
}
}