Работает нормально для меня, когда делаю что-то вроде примера ниже. Я думаю, что ключ устанавливает ссылку в foreach.
$var1 = '%DIR%/test';
replaceParameters(
$var1,
$var2,
$var3
);
function replaceParameters(&$variables) {
$variables = array_filter(func_get_args());
$parameters = [
'%DIR%' => __DIR__,
'%FILE%' => __FILE__,
];
foreach($variables as &$variable) {
$variable = str_replace(array_keys($parameters), array_values($parameters), $variable);
}
}