Возможно, вы могли бы использовать анонимные функции , чтобы свободные переменные были связаны как параметры в анонимной функции, которая возвращает строку со значениями, заполняющими свободные переменные.Это будет хорошо работать в сочетании с функцией extract внутри замыкания, в которой ключи из вашего массива становятся действительными переменными в локальной области, необходимой для оценки переменных, указанных в строке формата.
Или, возможно, существует относительно простая версия, использующая eval
(это просто иллюстрация, а не проверенный код):
function named_printf ($format_string, $values) {
extract($values);
$result = $format_string;
eval('$result = "'.$format_string.'";');
return $result;
}
echo named_printf ('Hello $msg', array('msg'=>'World'));
Механизмы управления областью действия PHP немного пугающие, поэтому вы можете убедиться, что этоне собирается пропускать переменные в область видимости повсюду.Также стоило бы проанализировать вклад.